Come rappresentare e convalidare gli URL dei siti Web per un'entità JPA

0

Ho un'applicazione che permetterà all'utente di inserire e memorizzare (in un DB) un URL di un sito Web per un'azienda. L'unico requisito (al momento) oltre l'entrata dell'URL del sito web è di verificare che l'URL sia valido e visualizzare l'URL con altre informazioni sulla società.

L'applicazione consiste in un'interfaccia utente client che trasferirà oggetti JSON al server. I controller Spring rest gestiscono la richiesta JSON e collegano tramite @RequestBody all'entità, ad esempio all'entità Company che contiene l'URL. Io uso @Valid per convalidare l'entità.

Conosco due approcci.

  1. Assegna il campo websiteUrl di Company un tipo di String e usa @URL ( org.hibernate.validator.constraints.URL ) per far sì che l'URL sia valido. Ma se utilizzo questo approccio, come faccio a consentire http e https? L'attributo protocol accetta solo un singolo String .
  2. Assegna il campo websiteUrl di Company un tipo di java.net.URL . Ciò consente ancora l'archiviazione nel DB come un varchar. Inoltre riflette accuratamente il tipo. Ma manca la semplice validazione dell'annotazione e l'associazione fallisce se l'URL non è valido.
posta James 30.08.2017 - 19:41
fonte

1 risposta

1

Da @URL Java Doc:

Validates the annotated string is an URL.

The parameters protocol, host and port are matched against the corresponding parts of the URL. and an additional regular expression can be specified using regexp and flags to further restrict the matching criteria.

Note: Per default the constraint validator for this constraint uses the java.net.URL constructor to validate the string. This means that a matching protocol handler needs to be available. Handlers for the following protocols are guaranteed to exist within a default JVM - http, https, ftp, file, and jar. See also the Javadoc for URL.

Quindi, devi solo annotare il parametro / attributo richiesto con @URL e nient'altro. Ad esempio.

@URL
private String siteUrl;

In altre parole. Passa all'opzione 1, perché java.net.URL gestirà la convalida per qualsiasi protocollo predefinito supportato dalla JVM. Include HTTP e HTTPS.

Successivamente, se la tua attività lo richiede, puoi trasformare in modo sicuro String in java.net.URL .

validatore del vincolo URL: org.hibernate.validator.internal.constraintvalidators.hv.URLValidator

    
risposta data 31.08.2017 - 10:39
fonte

Leggi altre domande sui tag