2016-01-22 1 views
3

Я хотел бы использовать аннотации JSR-303 для проверки параметров методов класса, отличного от ресурсов JAX-RS , Используя контейнеры JEE, он работает с EJB/CDI beans, но я не могу запустить его весной. Код может выглядеть следующим образом.Включение проверки аннотации JSR-303 в классе службы (не в контроллерах Spring или в ресурсах JAX-RS)

Какую зависимость от maven или другую конфигурацию мне не хватает? (Я не хочу называть Validator себя. Я хочу весной делает работу для меня здесь.)

Обратите внимание, что класс Person не является JPA объект, следовательно, Hibernate Validator в качестве реализации JPA не может сделать работать здесь.

public class Person{ 

    @NotNull 
    private String firstName; 

} 

@Service 
public class PersonServiceImpl{ 

    public void create(@Valid Person person){ 
     .... 
    } 
} 
+0

какая ошибка вы получаете ??? – OPK

+0

@JasonZ Вот точка, когда firstName имеет значение null. Я не получаю никаких ошибок! Я за исключением, чтобы получить javax.validation.ConstraintViolationException, которое не выбрано. – LAC

ответ

0

Согласно официальной документации Spring вы можете впрыснуть валидатор к вашему сервису, смотрите ссылку http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html.

Пример:

import javax.validation.Validator; 

@Service 
public class MyService { 

@Autowired 
private Validator validator; 
+0

Как я описал в своем вопросе, я не хочу использовать валидатор явно, потому что это многословно и, по-моему, мне не подходит. (В ресурсах JAX-RS то же самое делает Spring без явного использования Validator). Конечно, я могу сделать это с помощью AOP, но это мое последнее «нестандартное» решение Spring. – LAC

+0

Вы можете легко определить валидатор для ваших контроллеров и использовать валидатор неявно. Но если вы хотите проверить объекты внутри служб, вам нужен более высокий уровень абстракции с отражением для служб. – eg04lt3r

+0

Можете ли вы подробнее рассказать о своем последнем предложении? – LAC