代码之家  ›  专栏  ›  技术社区  ›  vardius

为什么我的spring验证注释不起作用

  •  1
  • vardius  · 技术社区  · 11 年前

    我有一个简单的方法来放置一个字符串,并使用注释来验证值 它不起作用

    这是我的课:

    public class Destination
    {
        @NotNull
        String address;
    
        public Destination(){}
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    }
    

    这是我的控制器方法

    @RequestMapping(value = "/search", method = RequestMethod.POST)
    public String findDestination(@ModelAttribute("destination") @Valid Destination destination, BindingResult result, RedirectAttributes redirectAttrs) {
        if(result.hasErrors()) {
            return "redirect:/";
        }
        Location location = LocationManager.getLocation(destination.getAddress());
        Weather weather = WeatherManager.getWeather(location);
        redirectAttrs.addFlashAttribute("weather", weather);
        redirectAttrs.addFlashAttribute("location", location);
        return "redirect:/";
    }
    

    这是我在jsp文件中的表单:

        <form:form method="post" action="search" commandName="destination" class="form-horizontal">
        <div class="control-group">
            <div class="controls">
                <form:input path="address" placeholder="Enter destination address"/>
                <form:errors path="address" cssclass="error"></form:errors>
                <input type="submit" value="Search" class="btn"/>
                </form:form>
            </div>
        </div>
    

    所以问题是我的输入无效 当我把它留空时,它仍然试图从空的目标对象中获取位置对象的地址,我得到了异常 HTTP Status 500 - Request processing failed; nested exception is java.util.NoSuchElementException

    exception
    
    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.util.NoSuchElementException
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)
        org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    root cause
    
    java.util.NoSuchElementException
        java.util.ArrayList$Itr.next(ArrayList.java:794)
        com.springapp.mvc.domain.LocationManager.getLocation(LocationManager.java:52)
        com.springapp.mvc.controller.HomeController.findDestination(HomeController.java:51)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        java.lang.reflect.Method.invoke(Method.java:601)
        org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
        org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
        org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
        org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
        org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
        org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
        org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    
    1 回复  |  直到 11 年前
        1
  •  0
  •   Paul Zolnierczyk    11 年前

    提交时的空html输入是空字符串,这可能是验证不起作用的原因。您可以尝试添加@Size注释,即。 @Size(min=1)