Проверка Spring против проверки гибернации

Сейчас я запуталась между ними. Я знаю, что Hibernate Validator 6 - это эталонная реализация спецификаций Bean Validation 2.0. Он поддерживает группировку, интернационализацию сообщений об ошибках, проверку пользовательских методов и т. Д. Вопрос в том, поддерживает ли Spring 5 эти функции, или я остался только с Hibernate Validator 6?

Почему я должен использовать Hibernate Validator вместе с моим проектом Spring Boot вместо предоставленной Spring Validation? Моей компании нужно обоснование для использования какой-либо сторонней библиотеки.

Во всех справочных примерах в Интернете предлагается использовать Hibernate Validator, и ничего особенного не найдено при проверке Spring, пожалуйста, посоветуйте или укажите другие ссылки.


person Nova Guy    schedule 11.01.2018    source источник


Ответы (2)


согласно Spring Документация по валидации

С помощью Bean Validation один экземпляр javax.validation.Validator обычно проверяет все объекты модели, которые объявляют ограничения проверки. Чтобы настроить такой валидатор с поддержкой JSR-303 с помощью Spring MVC, просто добавьте поставщика проверки компонентов, например Hibernate Validator, в свой путь к классам.

вы можете убедиться в этом, создав образец проекта весенней загрузки с зависимостью spring-boot-starter-web. Он фактически добавляет зависимость спящего режима-валидатора в ваш путь к классам

Вот пара ссылок на jsr-303 в весенних уроках:

  1. https://howtodoinjava.com/spring/spring-mvc/spring-bean-validation-example-with-jsr-303-annotations/

  2. https://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/

person Alex M981    schedule 11.01.2018
comment
Спасибо за ввод, вы говорите, что я не могу автономно использовать только Spring Validator, а под ним всегда будет использовать Hibernate Validator? - person Nova Guy; 11.01.2018
comment
Интерфейс org.springframework.validation.Validator может использоваться автономно, но на самом деле он является частью артефакта весеннего контекста, который, в свою очередь, зависит от org.hibernate: hibernate-validator - person Alex M981; 11.01.2018
comment
Это не совсем правильно, весенняя проверка не зависит от спящего режима. То, что вы упоминаете, является частью настройки валидатора JSR-303 / JSR-349 для использования Spring MVC в случае, если вы хотите выполнить валидацию с использованием интерфейса Spring Validator, вам не нужен валидатор гибернации. - person sql_dummy; 12.11.2018

Hibernate Validation - это реализация JSR 303: Bean Validation API. Spring имеет свой пакет проверки (он поддерживает JSR 303: Bean Validation API, но не поддерживает надлежащую реализацию).

Вы могли заметить, что org.springframework.validation.Validator отличается от javax.validation.Validator.

Вы можете выполнить Spring Validation, просто создав класс, реализующий org.springframework.validation.Validator так же просто, как здесь Но если вам нужно следовать спецификациям JSR 303: Bean Validation API, вы делаете это через Hibernate Validator.

Хорошо, чтобы добавить больше деталей.

1) Если вы хотите выполнить (некоторую) проверку, это можно сделать с помощью spring. (ниже фрагмент):

import org.springframework.validation.Validator;

class MyService{
     Validator validator =  new MyValidator();
     //perform validation
    }
class MyValidator implements Validator{
    // Your own validation logic. You may use ValidationUtils to help. 

}

2) Если вы хотите выполнить проверку (спецификация JSR 303), вам нужен ее провайдер, например Hibernate.

import javax.validation.Validator;
class MyService{
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); //Bootstraping
        Validator validator = factory.getValidator(); 
       //perform validation
}

Вышеупомянутый процесс начальной загрузки поддерживается Spring Framework. Все, что вам нужно сделать, это позволить Spring создать компонент для LocalValidatorFactoryBean

<bean id="validator"   
 class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

и введите этот bean.

import javax.validation.Validator;

@Service
public class MyService {

    @Autowired
    private Validator validator;
}
person sql_dummy    schedule 12.11.2018