请求处理失败;嵌套异常是javax.validation.ConstraintViolationException

时间:2016-01-26 14:32:44

标签: hibernate bean-validation

我遇到了Hibernate验证器的问题,当我点击提交按钮保存我的组件时,其组件的验证注释很少,我正在调整HTTP状态500错误。

这是我的弹簧控制器代码。

         @RequestMapping(value = "/add", method = RequestMethod.POST)
             public String postAdd(@Valid BDMComponent bdmComponent,BindingResult result, Model model) {
                 model.addAttribute("componentAttribute",bdmComponent);
                 if(result.hasErrors()){
                     System.out.println("It has errors");
                     return "components";
                 }
                 componentService.addComponent(bdmComponent);
                 model.addAttribute("listComponents", this.componentService.listOfComponents());
                 model.addAttribute("Success", "Component created Successfully");
              return "components";
             }

这是我的实体代码。

@Table(name="BDM_CYO_COMPONENT")
@Entity
@lombok.Data
public class BDMComponent {

    @Id
    @Column(name = "COMPONENT_ID")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @NotEmpty(message = "{name.required}")
    @Column(name="COMPONENT_NAME")
    private String componentName;

    @NotNull(message = "User name is required.")
    @NotBlank(message = "User name can't be left blank.")
    @Column(name="COMPONENT_IMAG_URL")
    private String componentImgUrl;
}

这是Hibernate的maven代码和pom.xml

中的javax.validation
           <dependency>
                <groupId>javax.validation</groupId>
                <artifactId>validation-api</artifactId>
                <version>1.1.0.Final</version>
            </dependency>

            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>5.2.2.Final</version>
            </dependency>

            <dependency>
               <groupId>javax.el</groupId>
               <artifactId>javax.el-api</artifactId>
               <version>2.2.4</version>
            </dependency>

Tomcat服务器异常日志:

HTTP Status 500 - Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [com.spring.model.BDMComponent] during persist time for groups [javax.validation.groups.Default, ]


type Exception report

message Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [com.spring.model.BDMComponent] during persist time for groups [javax.validation.groups.Default, ]

description The server encountered an internal error that prevented it from fulfilling this request.

exception 
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [com.spring.model.BDMComponent] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='{name.required}', propertyPath=componentName, rootBeanClass=class com.spring.model.BDMComponent, messageTemplate='{name.required}'}
    ConstraintViolationImpl{interpolatedMessage='User name can't be left blank.', propertyPath=componentImgUrl, rootBeanClass=class com.spring.model.BDMComponent, messageTemplate='User name can't be left blank.'}
]
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)



root cause 
javax.validation.ConstraintViolationException: Validation failed for classes [com.spring.model.BDMComponent] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='{name.required}', propertyPath=componentName, rootBeanClass=class com.spring.model.BDMComponent, messageTemplate='{name.required}'}
    ConstraintViolationImpl{interpolatedMessage='User name can't be left blank.', propertyPath=componentImgUrl, rootBeanClass=class com.spring.model.BDMComponent, messageTemplate='User name can't be left blank.'}
]
    org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:159)
    org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:94)
    org.hibernate.action.internal.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:178)
    org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:75)
    org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:393)
    org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:227)
    org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:207)
    org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:191)
    org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:321)
    org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:286)
    org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
    org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
    org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
    org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
    org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
    org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)
    org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:772)
    org.hibernate.internal.SessionImpl.persist(SessionImpl.java:746)
    org.hibernate.internal.SessionImpl.persist(SessionImpl.java:750)
    org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:875)
    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:606)
    org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:291)
    com.sun.proxy.$Proxy42.persist(Unknown Source)
    com.spring.dao.ComponentDaoImpl.addComponent(ComponentDaoImpl.java:28)
    com.spring.service.ComponentServiceImpl.addComponent(ComponentServiceImpl.java:31)
    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:606)
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
    org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    com.sun.proxy.$Proxy48.addComponent(Unknown Source)
    com.spring.web.controller.ComponentController.postAdd(ComponentController.java:42)
    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:606)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)



note The full stack trace of the root cause is available in the Apache Tomcat/7.0.47 logs.

0 个答案:

没有答案