Проверка и десериализация - это отдельные задачи, поэтому я бы связал их вместе, только если мне это действительно нужно, например, если вы действительно должны использовать схемы JSON. Но если вы можете выбрать свой собственный способ объявления ограничений, я рекомендую проверку бина, например, ресурс JAX-RS, подобный этому (обратите внимание на аннотацию @Valid
):
@Path("ping")
public class PingBoundary {
@POST
public String ping(@NotNull @Valid Person addressee) {
return "Hi " + addressee.getName() + "!";
}
}
И такой класс полезной нагрузки (используя аннотацию lombok @Data ):
@Data
public class Person {
private String name;
@Min(0)
private short age;
}
Передача неверного age
из -2 дает 400 Bad Request
с полезным телом ответа:
{
"classViolations": [],
"exception": null,
"fieldViolations": [],
"parameterViolations": [
{
"constraintType": "PARAMETER",
"message": "must be greater than or equal to 0",
"path": "ping.addressee.age",
"value": "-2"
}
],
"propertyViolations": [],
"returnValueViolations": []
}
Обратите внимание, что вы должны передать -parameters
компилятору, иначе path
будет ping.arg0.age
.