Domanda

E 'possibile utilizzare il quadro di convalida primavera con Spring MVC per verificare la presenza e il valore di una richiesta HTTP?

È stato utile?

Soluzione

Per verificare il presenza di una richiesta di intestazione, non è necessario il quadro di convalida. parametri della richiesta di intestazione sono obbligatori per default, e se un colpo di testa obbligatoria manca in una richiesta, Spring MVC risponde automaticamente con 400 Bad Request.

Quindi, il seguente codice controlla automaticamente la presenza della testata "Header-Name" ...

@PostMapping("/action")
public ResponseEntity<String> doAction(@RequestHeader("Header-Name") String headerValue) {
    // ...
}

... e se l'intestazione è facoltativo, l'annotazione avrebbe bisogno di essere sostituito da:

@RequestHeader(name = "Header-Name", required = false)

Per verificare il Valore di un'intestazione di richiesta, il quadro di convalida della molla può essere utilizzato. Per fare questo, è necessario

  1. Aggiungi @Validated alla classe controller. Si tratta di una soluzione necessaria fino a quando questa funzionalità è implementata .
  2. Aggiungere l'annotazione JSR-303 per il parametro di richiesta di intestazione, per esempio.

    @RequestHeader("Header-Name") @Pattern(regexp = "[A-Za-z]*") String headerValue
    

Si noti, tuttavia, che questo si tradurrà in un 500 nel caso di un valore di intestazione non valida. Controllare questo domanda per come ottenere anche il codice di stato corretto (cioè 400) per questo caso.

Altri suggerimenti

Non vedo come ciò sarebbe possibile, in quanto il quadro di convalida funziona solo sugli oggetti del dominio, non sulla richiesta HTTP in sé. Specificamente, il validatore interfaccia non specifica alcun metodo che prendono l'oggetto HttpServletRequest, che è quello che avresti bisogno di avere accesso al fine di afferrare le intestazioni e testarli.

Utilizzando il quadro di convalida si sente come la soluzione sbagliata per qualsiasi problema che si sta cercando di risolvere, soprattutto perché è difficile sapere quanto ci sarebbe stata una richiesta HTTP unico per un dato invio di un modulo. Stai cercando di testare per un'intestazione HTTP che dovrebbe sempre essere presenti nelle richieste per la vostra applicazione? Poi si potrebbe prendere in considerazione l'attuazione di un HandlerInterceptor , che intercettare ed elaborare tutte le richieste alle pagine che hai associato in qualsiasi HanderMappings. Stai cercando di testare per un'intestazione HTTP che dovrebbe sempre essere presenti in qualsiasi visualizzazione di una pagina della tua app? Poi ci si vuole implementare un Filtro , che opera al di fuori del contesto di Spring MVC.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top