Pergunta

É possível usar a estrutura de validação da mola com o MVC da mola para validar a presença e o valor de um cabeçalho de solicitação HTTP?

Foi útil?

Solução

Para verificar o presença de um cabeçalho de solicitação, você não precisa da estrutura de validação. Os parâmetros do cabeçalho da solicitação são obrigatórios por padrão e, se um cabeçalho obrigatório estiver ausente em uma solicitação, o Spring MVC responderá automaticamente com 400 solicitação ruim.

Portanto, o código a seguir verifica automaticamente a presença do cabeçalho "Nome do cabeçalho" ...

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

... e se o cabeçalho for opcional, a anotação precisará ser substituída por:

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

Para verificar o valor De um cabeçalho de solicitação, a estrutura de validação da primavera pode ser usada. Para fazer isso, você precisa

  1. Adicionar @Validated para a classe controladora. Esta é uma solução alternativa necessária até esse recurso é implementado.
  2. Adicione a anotação JSR-303 ao parâmetro do cabeçalho da solicitação, por exemplo

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

Observe, no entanto, que isso resultará em 500 no caso de um valor de cabeçalho inválido. Verificar essa questão Para como obter também o código de status correto (ou seja, 400) para este caso.

Outras dicas

Não vejo como isso seria possível, pois a estrutura de validação opera apenas em seus objetos de domínio, não na própria solicitação HTTP. Especificamente, a interface do validador Não especifica nenhum método que pegue o objeto HttpServletRequest, que é a que você precisaria ter acesso para agarrar os cabeçalhos e testá -los.

O uso da estrutura de validação parece a solução errada para qualquer problema que você esteja tentando resolver, especialmente porque é difícil saber como haveria um cabeçalho de solicitação HTTP exclusivo para um determinado envio de formulário. Você está procurando testar um cabeçalho HTTP que deveria sempre estar presente em solicitações ao seu aplicativo? Então você pode querer considerar a implementação de um HandlerInterceptor, que interceptará e processará todas as solicitações para páginas que você mapeou em qualquer Handermappings. Você está procurando testar um cabeçalho HTTP que deveria sempre estar presente em algum Visualização da página do seu aplicativo? Então você gostaria de implementar um Filtro, que opera fora do contexto do MVC da primavera.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top