Validação para os campos do Json campo não solicitado

Caros, existe alguma anotação ou meio que, verifica se o body enviado em um post tem exatamente a quantidade espera ou os mesmo campos do DTO para a solicitação?

É possível utilizar a anotação @Valid juntamente com o @RequestBody para validar se o corpo da requisição está de acordo com o objeto esperado.

Exemplo de DTO:

public class ExemploDTO {
    @NotNull
    private String campo1;

    @NotNull
    @Size(min = 10, max = 100)
    private String campo2;

    // getters e setters
}

Para validar se o corpo da requisição contém exatamente os campos campo1 e campo2 , bem como se esses campos atendem às restrições definidas na classe DTO, basta utilizar a anotação @Valid junto com o @RequestBody.

Exemplo:

@RestController
public class ExemploController {
    @PostMapping("/exemplo")
    public ResponseEntity<Void> exemplo(@Valid @RequestBody ExemploDTO dto) {
        // processa o objeto DTO recebido
        return ResponseEntity.ok().build();
    }
}

Caso haja alguma inconsistência, uma exceção será lançada e vai retornar uma resposta com status 400 (Bad Request) .

O exemplo do @gpd38 funciona bem, mas permite que o cliente envie um JSON como este:

{
  "campo1": "testando",
  "campo2": "aaaaabbbbb",
  "campo3": "xxxx"
}

O JSON acima atende as validações de ExemploDTO, embora não tenha “exatamente a quantidade esperada de campos”, apenas ignorando a propriedade campo3.

Se vc pretende que o JSON acima seja considerado um erro também, adicione a seguinte linha ao seu application.properties:

spring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES=true
1 curtida