Spring MVC: как избежать дублирования проверки на контроллере и объекте

#spring #spring-mvc #security

#spring #spring-mvc #Безопасность

Вопрос:

Допустим, у меня есть «Человек» @Entity , управляемый через JPA, который имеет ряд проверок, применяемых на уровне сущности ( @NotBlank, @NotNull и т.д.).

 @Entity
public class Person {

    @NotBlank
    private String name;

    @Email
    private String email;

    ...
}
 

По разным причинам мы не должны напрямую использовать объект в качестве аргумента метода контроллера, а скорее создавать пользовательскую «форму» (взяв пример из https://spring.io/guides/gs/validating-form-input /)

 @PostMapping("/person/save")
public String savePerson(@Valid PersonForm personForm, BindingResult bindingResult) {
    // map fields to Person entity individually and save
    ...
}
 

Но теперь, чтобы использовать встроенную проверку формы Spring / BindingResult , похоже, мне нужно дублировать всю мою логику проверки как в классах Person, так и PersonForm . Я не просто хочу определять их в PersonForm, потому что в приложении могут быть другие маршруты для обновления Person.

В идеале было бы каким-то образом, чтобы Spring мог снять ограничения проверки @Entity и применить их к форме (например, если свойства имеют одно и то же имя).

Я что-то упускаю здесь с проверкой?