У меня есть проект загрузки Spring, который имеет CrudRepository, Entity и Controller. Я в основном пытаюсь сохранить объект на основе данных, переданных контроллеру.Как отключить валидацию спящего режима в проекте Spring Boot
Для этого я использую spring-boot-starter-jpa
. My Entity аннотируется аннотациями JSR-303, которые проверяются в контроллере до, данные передаются в CrudRepository для сохранения.
метод управления:
@RequestMapping(value = "users", method = { RequestMethod.POST })
public SuccessfulResponse<User> addUser(@Valid @RequestBody User user, BindingResult validation) {
if (validation.hasErrors()) {
throw new ValidationException(validation);
}
User saved = this.users.save(user);
return new SuccessfulResponse<User>(saved);
}
Entity:
@Entity /* JPA */
public class User {
@Id /* JPA */
@Column(name="email_address", nullable=false, length=255) /* JPA */
@UserUnique
private String emailAddress;
}
Причиной моих вопросов является UserUnique
аннотаций. Его валидатор выглядит так:
public class UserUniqueValidator implements ConstraintValidator<UserUnique, String> {
private UserRepository users;
@Autowired
public UserUniqueValidator(UserRepository users) {
this.users = users;
}
@Override
public void initialize(UserUnique annotation) {}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return users.findOne(value) == null;
}
}
Что похоже на то, что проверка выполняется дважды. Один раз в контроллере с помощью аннотации @Valid
и один раз, когда Hibernate пытается сохранить объект. Однако, когда Hibernate пытается сохраняться объектом, он бросает:
javax.validation.ValidationException: HV000064: Unable to instantiate ConstraintValidator: class test.UserUniqueValidator`
Это, кажется, потому что его не весна-курса и не может вводить зависимость в конструктор. Итак, что я хочу сделать, это полностью отключить проверку Hibernate (как ее избыточность и уже происходит в контроллере).
Возможно, есть свойство javax.persistence.validation.mode
, которое вы можете установить на none
. Тем не менее, я не могу, чтобы жизнь меня определяла, где установить его в кодовой конфигурации.
Я понимаю, что есть такие вопросы, как JSR-303 dependency injection and Hibernate, но все они используют конфигурацию xml и вручную настраивают части слоя сохранения.
Что я хочу сделать, это «пост-настроить» требуемые части слоя персистентности, созданные Spring Boot для меня, потому что, если я определяю свой собственный, то я больше не использую автоматическую конфигурацию Spring Boot. Может ли кто-нибудь помочь мне определить, если 1) это возможно, и 2) какие части мне нужно настроить и как?
Спасибо!
Добавить свойство в файл 'application.properties'. 'spring.jpa.properties.javax.persistence.validation.mode = none' должен сделать трюк. –
Работал отлично, спасибо. Это упоминается в любой весенней документации? –
Как установить дополнительные свойства JPA, описано в справочном руководстве. –