Java 控件类中的Spring MVC@Valid注释导致glassfish服务器引发异常

Java 控件类中的Spring MVC@Valid注释导致glassfish服务器引发异常,java,spring,validation,spring-mvc,glassfish,Java,Spring,Validation,Spring Mvc,Glassfish,我已经在netbeans 8.2中创建了SpringMVC项目。控制器类如图所示: @Controller public class FormController { @InitBinder public void initBinder(WebDataBinder binder) { binder.setAllowedFields(new String[] { "userName", "password", "confirmPassword", "firstName", "lastName",

我已经在netbeans 8.2中创建了SpringMVC项目。控制器类如图所示:

@Controller
public class FormController {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setAllowedFields(new String[] {
"userName", "password", "confirmPassword", "firstName",
"lastName", "email", "Marketing", "legalConfirmation","myAddress" });
}
@RequestMapping(value="new",method= RequestMethod.GET)
public String handleregistration(Model model){
    model.addAttribute("userdatabean",new UserDetails());
    return "Registration";

}
@RequestMapping(value="Registration",method=RequestMethod.POST)    
public ModelAndView Gatherdata(@Valid 

@ModelAttribute("userdatabean")UserDetails 

data,BindingResult error,ModelMap modelmap)throws Exception{
if(error.hasErrors()){
    ModelAndView modelerror=new ModelAndView("Registration");
    return modelerror;

}
ModelAndView dataModel=new ModelAndView("success");
dataModel.addObject("registration", data);
return dataModel;

}    


}
注册表格如下所示:

%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>User Registration</title>
    <style>
        .error{
            color: red; font-weight: bold;
        }
    </style>
</head>
<body>
    <form:form action="Registration" modelAttribute="userdatabean" >
        <h1>New user Registration</h1>
        <div>UserName: <form:input path="userName"/>
            <form:errors path="userName" cssClass="error"/>
        </div>
        <div> Email: <form:input path="email"/>
            <form:errors path="email" cssClass="error"/>
        </div>
        <div> Address:<form:input path="myAddress.StreetName"/>
            <form:errors path="myAddress.StreetName" cssClass="error"/>
        </div>
        <div> first Name: <form:input path="firstName"/>
            <form:errors path="firstName"  cssClass="error"/>
        </div>
        <div> Last Name: <form:input path="lastName"/>
            <form:errors path="lastName"  cssClass="error"/>
        </div>
        <div> Password:<form:password path="Password"/>
            <form:errors path="Password"  cssClass="error"/>
        </div>
        <div> Confirm Password:<form:password path="confirmPassword"/>
            <form:errors path="confirmPassword" cssClass="error"/>
        </div>
        <div><form:checkbox id="Marketing" path="Marketing"/>Please send  

me information via email
            <form:errors path="Marketing" cssClass="error"></form:errors>
        </div>
        <div><form:checkbox id="legalConfirmation" 

path="legalConfirmation"/>I accept the terms of use
                <form:errors path="legalConfirmation" cssClass="error"/>
            </div>
        <div><input type="submit" value="Register"/></div>    
    </form:form>
</body>
</html>
成功页面如下:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Registration Successful</title>
</head>
<body>
    <h4>successful registration of user</h4>
    <table>
        <tr>
            <td>
                Student Username:
            </td>
            <td>${registration.userName}</td>
        </tr>
        <tr>
            <td>
                Student last name:
            </td>
            <td>${registration.lastName}</td>
        </tr>
        <tr>
            <td>
                Student first name:
            </td>
            <td>${registration.firstName}</td>
        </tr>
        <tr>
            <td>
                Student email:
            </td>
            <td>${registration.email}</td>
        </tr>
        <tr>
            <td>
                Student address:
            </td>
            <td>${registration.myAddress.StreetName}</td>
        </tr>
    </table>
</body>
</html>

当我在没有@Valid注释的情况下输入相同的法律参数时,不会引发异常。把它插回去,它就会抛出。请协助解决。我正在学习这个框架,所以可能不擅长它。

我已经包括了jars validation-api-1.0.0.GA.jar、hibernate-validator-annotation-processor-4.1.0.Final.jar。右键单击您的项目,选择“属性”


转到“库”选项卡“处理器”

您转储了所有代码,但忘记了重要的部分—实际的异常…消息:内部服务器错误描述:服务器遇到了一个内部错误,使其无法满足此请求。异常org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1根本原因java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1类型异常报告消息内部服务器错误描述服务器遇到内部错误,无法满足此请求。异常org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1根本原因java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1请注意,GlassFish Server开源版本4.1.1日志中提供了异常及其根本原因的完整堆栈跟踪。请编辑您的问题和格式适当性不要添加为注释,因为这样会使其不可读。
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Registration Successful</title>
</head>
<body>
    <h4>successful registration of user</h4>
    <table>
        <tr>
            <td>
                Student Username:
            </td>
            <td>${registration.userName}</td>
        </tr>
        <tr>
            <td>
                Student last name:
            </td>
            <td>${registration.lastName}</td>
        </tr>
        <tr>
            <td>
                Student first name:
            </td>
            <td>${registration.firstName}</td>
        </tr>
        <tr>
            <td>
                Student email:
            </td>
            <td>${registration.email}</td>
        </tr>
        <tr>
            <td>
                Student address:
            </td>
            <td>${registration.myAddress.StreetName}</td>
        </tr>
    </table>
</body>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!-- was: <?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:p="http://www.springframework.org/schema/p"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans   

http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
   http://www.springframework.org/schema/aop 

http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org

/schema/tx/spring-tx-4.0.xsd
   http://www.springframework.org/schema/mvc
   http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-4.0.xsd">
 <mvc:annotation-driven />
 <context:component-scan base-package="com.Ricko.Controller"/>


 </beans>
 dispatcher threw exception
 java.lang.StringIndexOutOfBoundsException: String index out of range: -1
 at org.springframework.validation.
 AbstractErrors.isMatchingFieldError(AbstractErrors.java:236)
 at org.springframework.validation.AbstractBindingResult.
 getFieldError(AbstractBindingResult.java:216)
 at org.springframework.validation.beanvalidation.
 SpringValidatorAdapter.processConstraintViolations
  (SpringValidatorAdapter.
 java:122)
 g.springframework.validation.beanvalidation.SpringValidatorAdapter.
 validate(SpringValidatorAdapter.java:108)
 g.springframework.validation.DataBinder.validate(DataBinder.java:760)
 at 
 org.springframework.web.method.annotation.ModelAttributeMethodProcessor
 .validateIfApplicable(ModelAttributeMethodProcessor.java:161)
  at org.springframework.web.method.annotation.
  ModelAttributeMethodProcessor
.resolveArgument(ModelAttributeMethodProcessor.java:109)
 org.springframework.web.method.support.
 HandlerMethodArgumentResolverComposite.resolveArgument
 (HandlerMethodArgumentResolverComposite.java:79)
 at org.springframework.web.method.support.
 InvocableHandlerMethod.getMethodArgumentValues
 (InvocableHandlerMethod.java:157)
 at org.springframework.web.method.support.
 InvocableHandlerMethod.invokeForRequest
 (InvocableHandlerMethod.java:124)
at org.springframework.web.servlet.mvc.method.annotation.
ServletInvocableHandlerMethod.invokeAndHandle
 (ServletInvocableHandlerMethod.java:104)
 at org.springframework.web.servlet.mvc.method.annotation.
 RequestMappingHandlerAdapter.invokeHandleMethod
 (RequestMappingHandlerAdapter.java:749)
at org.springframework.web.servlet.mvc.method.annotation.
RequestMappingHandlerAdapter.handleInternal
(RequestMappingHandlerAdapter.java:690)
at org.springframework.web.servlet.mvc.method.
AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.
doDispatch(DispatcherServlet.java:945)
at org.springframework.web.servlet.DispatcherServlet.
doService(DispatcherServlet.java:876)
at org.springframework.web.servlet.FrameworkServlet.
processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doPost
(FrameworkServlet.java:863)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at org.springframework.web.servlet.FrameworkServlet.
service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.StandardWrapper.service
(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:344)
at org.apache.catalina.core.ApplicationFilterChain.
doFilter(ApplicationFilterChain.java:214)
at org.glassfish.tyrus.servlet.TyrusServletFilter.
doFilter(TyrusServletFilter.java:305)
at org.apache.catalina.core.ApplicationFilterChain.
internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.
doFilter(ApplicationFilterChain.java:214)
at org.apache.catalina.core.StandardWrapperValve.
invoke(StandardWrapperValve.java:316)
at org.apache.catalina.core.StandardContextValve.
invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.
doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.
invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.
invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.
invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.
doService(CoyoteAdapter.java:416)
at org.apache.catalina.connector.CoyoteAdapter.
service(CoyoteAdapter.java:283)
at com.sun.enterprise.v3.services.impl.
ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.
service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.
runService(HttpHandler.java:206)
at org.glassfish.grizzly.http.server.HttpHandler.
doHandle(HttpHandler.java:180)
at org.glassfish.grizzly.http.server.HttpServerFilter.
handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.
execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.
executeFilter(DefaultFilterChain.java:283)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.
executeChainPart(DefaultFilterChain.java:200)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.
execute(DefaultFilterChain.java:132)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.
process(DefaultFilterChain.java:111)
at org.glassfish.grizzly.ProcessorExecutor.
execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.
fireIOEvent(TCPNIOTransport.java:536)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.
fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.
run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.
access$100(WorkerThreadIOStrategy.java:56)
at  org.glassfish.grizzly.strategies.
WorkerThreadIOStrategy$WorkerThreadRunnable.
run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.
doWork(AbstractThreadPool.java:591)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.
run(AbstractThreadPool.java:571)
at java.lang.Thread.run(Thread.java:745)