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