Java 为什么我的spring验证注释不起作用
我有一个简单的例子,我放了一个字符串,我用注释来验证这个值 但它不起作用 这是我的班级:Java 为什么我的spring验证注释不起作用,java,spring,validation,spring-mvc,nosuchelementexception,Java,Spring,Validation,Spring Mvc,Nosuchelementexception,我有一个简单的例子,我放了一个字符串,我用注释来验证这个值 但它不起作用 这是我的班级: public class Destination { @NotNull String address; public Destination(){} public String getAddress() { return address; } public void setAddress(String address) {
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>
提交时的空html输入是空字符串,这可能是验证不起作用的原因。您可以尝试添加@Size注释,即
@Size(min=1)
请向我们显示异常堆栈跟踪。使用堆栈跟踪更新了我的问题我不知道为什么验证没有发生,但显然出现了错误,从LocationManager.getLocation
中,让我们看看。也许我在目标类文件中为@notnull注释导入了错误的类?我导入了import com.sun.istack.internal.NotNull代码>好吗?它来自那里,因为它获取destination.getAddress()作为空值,并尝试获取空地址的跳线,我对此表示怀疑。您应该有javax.validation.constraints.NotNull
。好吧,它是这样工作的,但它不显示错误消息。我以为会显示某种默认消息,或者是因为我重定向了它?
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)