2014-08-30 4 views
0

У меня есть приложение Spring MVC на Tomcat. Я пытаюсь добавить в него валидацию. По какой-то причине моя проверка игнорируется и не проверяется.Проверка Spring MVC игнорируется

Вот мой POJO

import org.hibernate.validator.constraints.Range; 
public class Goal { 

    @Range(min = 1, max = 15) 
    private int minutes; 

    public int getMinutes() { 
     return minutes; 
    } 

    public void setMinutes(int minutes) { 
     this.minutes = minutes; 
    } 
} 

И контроллер

import org.springframework.validation.BindingResult; 
import javax.validation.Valid; 

@Controller 
@SessionAttributes("goal") 
public class GoalController { 

    @RequestMapping(value = "addGoal", method = RequestMethod.POST) 
    public String updGoal(@ModelAttribute("goal") @Valid Goal goal, BindingResult result) { 
     System.out.println(goal.getMinutes()); 

     System.out.println(result.hasErrors()); 

     if(result.hasErrors()) { 
      return "addGoal"; 
     } 

     return "redirect:addMinutes.html"; 
    } 
} 

Но даже если я пытаюсь поставить любые отрицательные значения, как «минуты» там нет ошибок производится.

Добавлена ​​конфигурация

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <mvc:annotation-driven/> 
    <context:component-scan base-package="com.xlab.ice.mvc.controller"/> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
      p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> 

    <mvc:resources mapping="/pdfs/**" location="pdf"/> 

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="messages"/> 

    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" p:defaultLocale="en"/> 

    <mvc:interceptors> 
     <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" p:paramName="lang"/> 
    </mvc:interceptors> 

    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0"/> 

</beans> 
+0

У вас ваша конфигурация. –

+0

У вас есть реализация проверки боба (например, проверка Hibernate) в вашем приложении? Вы что-то сконфигурировали (пожалуйста, разместите конфигурацию пружины для веб-материала). – Ralph

+1

. Проверьте, существует ли проверка подлинности компонента в каталоге WEB-INF/lib вашего приложения. – Shailendra

ответ

0

Решение просто. Библиотеки проверки должны быть помещены в путь к классам.

0

ОТКАЗ: При отсутствии полного соответствующего кода контроллера и подозрение, что библиотека валидатор может отсутствовать в пути к классам, вот небольшой тест, чтобы просто проверить конфигурацию. Вы можете использовать это очень быстро, чтобы определить, имеются ли все конфигурации, просто удалив часть атрибута сеанса.

Давайте попробуем. Чтобы упростить тестирование с помощью REST Client, а также неполный код, я не использовал SessionAttributes. Также есть библиотека проверки подлинности Hibernate в моем пути к среде выполнения. Кроме того, я использовал аннотацию ResponseBody, чтобы Spring автоматически конвертировала текст String в текст ответа без использования альтернативной технологии представления (например, jsp).

import org.hibernate.validator.constraints.Range; 
public class Goal { 

    @Range(min = 1, max = 15) 
    private int minutes; 

    public int getMinutes() { 
     return minutes; 
    } 

    public void setMinutes(int minutes) { 
     this.minutes = minutes; 
    } 
} 

Тогда мой контроллер

@Controller 
public class GoalController { 

    @RequestMapping(value = "/addGoal", method = RequestMethod.POST) 
    public @ResponseBody String updGoal(@ModelAttribute("goal") @Valid Goal goal, BindingResult result) { 
     System.out.println(goal.getMinutes()); 

     System.out.println(result.hasErrors()); 

     if(result.hasErrors()) { 
      return "Errors !"; 
     } 

     return "No Errors !"; 
    } 
} 

задерживаясь приложение с клиентом отдыха на http://localhost:8080/testApp/addGoal с параметрами POST, как minutes=1 дает мне ответ как No Errors ! в то время как с minutes=-1 дает мне Errors !

+1

Он работает для вас, поздравления. Но как это помогает в качестве ответа? – Bart

+0

Bart - Я попытался сохранить конфигурацию в своем ответе как можно ближе к вопросу, потому что общий код, особенно контроллер, не завершен.Поскольку SessionAttributes находятся в изображении, метод контроллера для запроса GET и метода, если отсутствует аннотация с @ModelAttribute. Во-вторых, в отсутствие полного кода, используя мой код, можно легко проверить, что соответствующая библиотека валидатора действительно находится в пути к классам, и необходимая конфигурация на месте. Поэтому IMHO это может определенно помочь в качестве указателя, пока не будет предоставлен необходимый код. – Shailendra

+0

@Bart - я добавил дополнительную информацию, чтобы понять, как это может помочь в качестве ответа. – Shailendra

0

пожалуйста, вы можете также подтвердите, что у вас есть JSR 303 implementation в вашем пути к классу - скажите hibernate-validator jar файлам.

Для включения проверки jsr-303 требуется <mvc:annotation-driven />. Это необходимо для аннотации @Valid, чтобы на самом деле что-либо сделать.

попробуйте добавить <mvc:annotation-driven/> в контексте сервлета XML, если этого не сделать.

SchemaLocation запись должна MVC содержать эти два:

http://www.springframework.org/schema/mvc  
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
+0

Я думаю, что в отсутствие механизм диспетчеризации запросов Spring MVC (с помощью аннотаций @ Controller/RequestMapping) не работает, поэтому кажется, что мы можем с уверенностью предположить, что он присутствует. – Shailendra

+0

У меня есть в моей конфигурации. Также у меня есть «http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd» – ICE

Смежные вопросы