¿Cuál es la mejor forma de comprobar si una URL es válida en Java?
Si trató de llamar new URL(urlString)
y atrapar a MalformedURLException
, pero parece estar contento con cualquier cosa que comience con http://
.
No me preocupa establecer una conexión, solo validez. ¿Existe algún método para esto? ¿Una anotación en Hibernate Validator? ¿Debería usar una expresión regular?
Editar: algunos ejemplos de URL aceptadas son http://***
y http://my favorite site!
.
java
validation
url
Eric Wilson
fuente
fuente
URL
acepte el constructor?http://***
" funciona. "http://my favorite site!
" funciona. No puedo hacer que genere una excepción (cuando http: // está al principio)Respuestas:
Considere usar la clase Apache Commons UrlValidator
Hay varias propiedades que se pueden establecer para controlar cómo, por defecto, ésta se comporta de clase
http
,https
yftp
se aceptan.fuente
local
, etc.new URL(name).toURI()
convierte en la solución.Esta es la forma que probé y encontré útil,
fuente
URL u = new URL(http://google).toURI();
no lanzará una excepción.new URL(http://google)
es válido ^^ tenemos muchos dominios internos en mi empresa como esteMe encantaría publicar esto como un comentario a la respuesta de Tendayi Mawushe , pero me temo que no hay suficiente espacio;)
Esta es la parte relevante de la fuente de Apache Commons UrlValidator :
Puede construir fácilmente su propio validador desde allí.
fuente
La forma más "infalible" es comprobar la disponibilidad de la URL:
fuente
Mi enfoque favorito, sin bibliotecas externas:
fuente
A juzgar por el código fuente de
URI
laEl constructor realiza más validaciones que los otros constructores. Podrías probar ese, pero YMMV.
fuente
No me gustó ninguna de las implementaciones (porque usan una Regex que es una operación costosa, o una biblioteca que es una exageración si solo necesita un método), así que terminé usando la clase java.net.URI con algunos comprobaciones adicionales y limitando los protocolos a: http, https, file, ftp, mailto, news, urn.
Y sí, detectar excepciones puede ser una operación costosa, pero probablemente no tan mala como las expresiones regulares:
fuente
paquete validador:
Parece haber un buen paquete de Yonatan Matalon llamado UrlUtil . Citando su API:
Enfoque de Sun: verifique la dirección de red
El sitio Java de Sun ofrece un intento de conexión como una solución para validar URL.
Otros fragmentos de código de expresiones regulares:
Hay intentos de validación de expresiones regulares en el sitio de Oracle y weberdev.com .
fuente