首页 文章

在大小注释上自定义Java验证消息

提问于
浏览
0

我有一个简单的实体类,表示数据库中的表 . 这个类有两个属性,我在它们上面都有一个Size注释,如图所示

public class ExecutionStepOption extends AbstractDomainObject implements Nameable {

private static final long serialVersionUID = 4249454967446069549L;

@NotNull
@Size(min = 1, max = 100)
@Column(name = "name")
private String name;

@NotNull
@Size(min = 1, max = 10)
@Column(name = "value")
private String value;

在HTML方面,我有一个包含两个文本框的表单,其中包含名称和值 . 当用户输入的大小超过10个字符时,我想显示一个自定义消息,如“值大于10个字符” .

我试过这个

@NotNull
@Size(min = 1, max = 10, message = "Size cannot be greater than 10 Characters")
@Column(name = "value")
private String value;

但似乎没有用 . 我仍然得到丑陋的Java消息

Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction

堆栈跟踪

javax.validation.ConstraintViolationException: Validation failed for classes [org.misoenergy.darr.domain.ExecutionStepOption] during persist time for groups [javax.validation.groups.Default, ]

约束违规列表:[ConstraintViolationImpl {interpolatedMessage ='Size不能大于10个字符',propertyPath = value,rootBeanClass = class org.misoenergy.darr.domain.ExecutionStepOption,messageTemplate ='Size不能大于10个字符'}] org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:160)〜[hibernate-core-4.3.7.Final.jar:4.3.7.Final] org.hibernate.cfg.beanvalidation.BeanValidationEventListener . onPreInsert(BeanValidationEventListener.java:95)〜[hibernate-core-4.3.7.Final.jar:4.3.7.Final]在org.hibernate.action.internal.EntityInsertAction.preInsert(EntityInsertAction.java:218)〜[hibernate -core-4.3.7.Final.jar:4.3.7.Final] at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:97)〜[hibernate-core-4.3.7.Final.jar: 4.3.7.Final]在org.hibernate的org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463)〜[hibernate-core-4.3.7.Final.jar:4.3.7.Final] . Ë在org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java)中的ngine.spi.ActionQueue.executeActions(ActionQueue.java:349)〜[hibernate-core-4.3.7.Final.jar:4.3.7.Final] :350)〜[hibernate-core-4.3.7.Final.jar:4.3.7.Final] org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)〜[hibernate-core-4.3 . 7.Final.jar:4.3.7.Final] at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)~ [hibernate-core-4.3.7.Final.jar:4.3.7.Final] at在org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction的org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)〜[hibernate-core-4.3.7.Final.jar:4.3.7.Final] .beforeTransactionCommit(JdbcTransaction.java:101)〜[hibernate-core-4.3.7.Final.jar:4.3.7.Final] org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177) 〜[hibernate-core-4.3.7.Final.jar:4.3.7.Final] org.hibernate.jpa.internal.Transac tionImpl.commit(TransactionImpl.java:77)〜[hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final] org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517)〜 [spring-orm-4.0.8.RELEASE.jar:4.0.8.RELEASE]在org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:757)〜[spring-tx-4.0.8.RELEASE . jar:4.0.8.RELEASE] at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726)〜[spring-tx-4.0.8.RELEASE.jar:4.0.8.RELEASE] at sun . 在java.lang.reflect.Method.invoke(方法)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na:1.7.0_60]中的reflect.GeneratedMethodAccessor421.invoke(未知来源)〜[na:na] .java:606)〜[na:1.7.0_60] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)〜[spring-aop-4.0.8.RELEASE.jar:4.0.8 . 发布org.springframework ora.springframework.aop.framework.ReflectiveMethodInvocation.proceed中的.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)~ [spring-aop-4.0.8.RELEASE.jar:4.0.8.RELEASE](ReflectiveMethodInvocation . java:157)〜[spring-aop-4.0.8.RELEASE.jar:4.0.8.RELEASE] org.springframework.batch.core.configuration.annotation.SimpleBatchConfiguration $ PassthruAdvice.invoke(SimpleBatchConfiguration.java:127)~ [spring-batch-core-3.0.2.RELEASE.jar:3.0.2.RELEASE]在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.0.8 . 在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)〜[spring-aop-4.0.8.RELEASE.jar:4.0.8.RELEASE]的RELEASE.jar:4.0.8.RELEASE] com.sun.proxy . $ Proxy143.commit(未知来源)〜[na:na] at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:478)〜[spring-tx-4.0.8.R ELEASE.jar:4.0.8.RELEASE]在org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:272)〜[spring-tx-4.0.8.RELEASE.jar:4.0.8.RELEASE] at at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)〜[spring-tx-4.0.8.RELEASE.jar:4.0.8.RELEASE] atcom.ryantenney.metrics.spring.TimedMethodInterceptor.invoke上的org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.0.8.RELEASE.jar:4.0.8.RELEASE] (TimedMethodInterceptor.java:48)〜[metrics-spring-3.0.2.jar:na] at com.ryantenney.metrics.spring.TimedMethodInterceptor.invoke(TimedMethodInterceptor.java:34)〜[metrics-spring-3.0.2 . jar:na] at com.ryantenney.metrics.spring.AbstractMetricMethodInterceptor.invoke(AbstractMetricMethodInterceptor.java:59)〜[metrics-spring-3.0.2.jar:na] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(在Org.springframework.aop.framework.CglibAopProxy $ DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644)〜[spring]的ReflectiveMethodInvocation.java:179)~ [spring-aop-4.0.8.RELEASE.jar:4.0.8.RELEASE] -aop-4.0.8.RELEASE.jar:4.0.8.RELEASE] at org.misoenergy.darr.service.ExecutionService $$ EnhancerBySpringCGLIB $$ 67c89d09.saveExecutionStepOption()〜[spring-core-4.0.8.RELEASE.jar :N a] at org.misoenergy.darr.web.rest.ExecutionResource.createExecutionStepOption(ExecutionResource.java:272)〜[classes /:na] at org.misoenergy.darr.web.rest.ExecutionResource $$ FastClassBySpringCGLIB $$ 142e2153.invoke ()〜[spring-core-4.0.8.RELEASE.jar:na] org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)〜[spring-core-4.0.8.RELEASE.jar :4.0.8.RELEASE] org.springframework.aop.framework.CglibAopProxy $ CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708)〜[spring-aop-4.0.8.RELEASE.jar:4.0.8.RELEASE] at org .springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)〜[spring-aop-4.0.8.RELEASE.jar:4.0.8.RELEASE] org.springframework.security.access.intercept.aopalliance . org.springframework.aop.framework.ReflectiveMethodInvocation.proceed中的MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:64)〜[spring-security-core-3.2.5.RELEASE.jar:3.2.5.RELEASE](ReflectiveMethodInvocation.java:179 )〜[spring-aop-4.0.8 .RELEASE.jar:4.0.8.RELEASE]在com.ryantenney.metrics的com.ryantenney.metrics.spring.TimedMethodInterceptor.invoke(TimedMethodInterceptor.java:48)〜[metrics-spring-3.0.2.jar:na] .spring.TimedMethodInterceptor.invoke(TimedMethodInterceptor.java:34)〜[metrics-spring-3.0.2.jar:na] at com.ryantenney.metrics.spring.AbstractMetricMethodInterceptor.invoke(AbstractMetricMethodInterceptor.java:59)〜[metrics- spring-3.0.2.jar:na] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)〜[spring-aop-4.0.8.RELEASE.jar:4.0.8.RELEASE] at org.springframework.aop.framework.CglibAopProxy $ DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644)〜[spring-aop-4.0.8.RELEASE.jar:4.0.8.RELEASE] org.misoenergy.darr.web.rest .ExecutionResource $$ EnhancerBySpringCGLIB $$ 7a95ca53.createExecutionStepOption()〜[spring-core-4.0.8.RELEASE.jar:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)〜[na:1.7.0_60] at sun .reflect.NativeMethodAccessorImpl .invoke(NativeMethodAccessorImpl.java:57)〜[na:1.7.0_60] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na:1.7.0_60] at java.lang.reflect.Method.invoke (Method.java:606)〜[na:1.7.0_60] at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)〜[spring-web-4.0.8.RELEASE.jar: 4.0.8.RELEASE] org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)〜[spring-web-4.0.8.RELEASE.jar:4.0.8.RELEASE] at org . org.springframework.web.servlet上的springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)〜[spring-webmvc-4.0.8.RELEASE.jar:4.0.8.RELEASE] org.springframework.web.servlet.mvc.method上的.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)~ [spring-webmvc-4.0.8.RELEASE.jar:4.0.8.RELEASE] . annotation.RequestMappingHand orr.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java)中的lerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)〜[spring-webmvc-4.0.8.RELEASE.jar:4.0.8.RELEASE] :org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)〜[spring-webmvc-4.0 . 8.RELEASE.jar:4.0.8.RELEASE]在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)〜[spring-webmvc-4.0.8.RELEASE.jar:4.0.8.RELEASE在Org.springframework.web.servlet.FrameworkServlet的org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)〜[spring-webmvc-4.0.8.RELEASE.jar:4.0.8.RELEASE] .doPost(FrameworkServlet.java:863)〜[spring-webmvc-4.0.8.RELEASE.jar:4.0.8.RELEASE]在javax.servlet.http.HttpServlet.service(HttpServlet.java:646)〜[tomcat- embed-core-7.0.56.jar:7.0.56] atorg.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)〜[spring-webmvc-4.0.8.RELEASE.jar:4.0.8.RELEASE],位于javax.servlet.http.HttpServlet.service(HttpServlet) .java:727)〜[tomcat-embed-core-7.0.56.jar:7.0.56] org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)〜[tomcat-embed-core- 7.0.56.jar:7.0.56] org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)~ [tomcat-embed-core-7.0.56.jar:7.0.56] at org . 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)〜[tomcat- embed-core-7.0.56.jar:7.0.56] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)~ [tomcat-embed-core-7.0.56.jar:7.0.56 ]在com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:97)〜[metric s-servlet-3.0.2.jar:3.0.2] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)〜[tomcat-embed-core-7.0.56.jar:7.0.56 ] org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)〜[tomcat-embed-core-7.0.56.jar:7.0.56] at org.springframework.boot.actuate.trace.WebRequestTraceFilter ordo.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)中的.doFilterInternal(WebRequestTraceFilter.java:110)~ [spring-boot-actuator-1.1.9.RELEASE.jar:1.1.9.RELEASE] 〜[spring-web-4.0.8.RELEASE.jar:4.0.8.RELEASE] org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)~ [tomcat-embed-core-7.0.56 .jar:7.0.56] atg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)~ [tomcat-embed-core-7.0.56.jar:7.0.56] org.springframework.boot .actuate.autoconfigure.EndpointWebMvcAutoConfiguration $ ApplicationContextHeaderFilter.doFilt erInternal(EndpointWebMvcAutoConfiguration.java:280)〜[spring-boot-actuator-1.1.9.RELEASE.jar:1.1.9.RELEASE] org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)〜 [spring-web-4.0.8.RELEASE.jar:4.0.8.RELEASE]在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)〜[tomcat-embed-core-7.0.56 . jar:7.0.56] atg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)〜[tomcat-embed-core-7.0.56.jar:7.0.56] org.springframework.web . org.springframework.web.filter.OncePerRequestFilter.doFilter上的filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)〜[spring-web-4.0.8.RELEASE.jar:4.0.8.RELEASE](OncePerRequestFilter.java:107 )〜[spring-web-4.0.8.RELEASE.jar:4.0.8.RELEASE]在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)〜[tomcat-embed-core-7.0 . 56.jar:7.0.56]在org.apache.catalina.core.ApplicationFilter在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)的Chain.doFilter(ApplicationFilterChain.java:208)~ [tomcat-embed-core-7.0.56.jar:7.0.56]〜 [spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)~ [spring-security- web-3.2.5.RELEASE.jar:3.2.5.RELEASE] at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)〜[spring-security-web-3.2.5 .RELEASE.jar:3.2.5.RELEASE]在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)〜[spring-security-web-3.2.5.RELEASE.jar:3.2 . 5.RELEASE] org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)〜[spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] at org . springframework.security.web.FilterChainProxy $ VirtualF ilterChain.doFilter(FilterChainProxy.java:342)〜[spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java) :103)〜[spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)〜[spring- security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)~ [spring-security-web-3.2.5 .RELEASE.jar:3.2.5.RELEASE]在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)〜[spring-security-web-3.2.5.RELEASE.jar:3.2 . 5.RELEASE]在org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)〜[spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] atorg.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)〜[spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] org.springframework.security.web .savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)〜[spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter( FilterChainProxy.java:342)~ [spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)〜 org.springframework.security.web.FilterChainProxy $ [VirtualFilterChain.doFilter]([...] 3.2.5.RELEASE.jar:3.2.5.RELEASE]在org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110)〜[spring-security-web-3.2.5.RELEASE .ja r:3.2.5.RELEASE]在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)〜[spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE在Org.springframework.security的org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)〜[spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] org.springframework.security.web.context.request上的.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)〜[spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] . org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java)中的async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)〜[spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] :107)〜[spring-web-4.0.8.RELEASE.jar:4.0.8.RELEASE] org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)〜[spring-security-我们b-3.2.5.RELEASE.jar:3.2.5.RELEASE]在org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)〜[spring-security-web-3.2.5.RELEASE.jar :3.2.5.RELEASE] org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)〜[spring-security-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] at org .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)~ [tomcat-embed-core-7.0.56.jar:7.0.56] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain . java:208)〜[tomcat-embed-core-7.0.56.jar:7.0.56] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)~ [tomcat-embed-core-7.0 .56.jar:7.0.56] org.apache中的org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)[tomcat-embed-core-7.0.56.jar:7.0.56] . org.apache.cata上的catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)[tomcat-embed-core-7.0.56.jar:7.0.56] lina.core.StandardHostValve.invoke(StandardHostValve.java:170)[tomcat-embed-core-7.0.56.jar:7.0.56] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) [tomcat-embed-core-7.0.56.jar:7.0.56]在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)[tomcat-embed-core-7.0.56.jar:7.0 .56] org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)[tomcat-embed-core-7.0.56.jar:7.0.56] at org.apache.coyote.http11.AbstractHttp11Processor . 进程(AbstractHttp11Processor.java:1070)[tomcat-embed-core-7.0.56.jar:7.0.56] at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:611)[tomcat-embed-core -7.0.56.jar:7.0.56] at org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1736)[tomcat-embed-core-7.0.56.jar:7.0.56在java.util.concurren的org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1695)[tomcat-embed-core-7.0.56.jar:7.0.56] t.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[na:1.7.0_60] at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)[na:1.7.0_60] at org.apache . tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)[tomcat-embed-core-7.0.56.jar:7.0.56] at java.lang.Thread.run(Thread.java:745) [NA:1.7.0_60]

2 回答

  • 0

    如果你使用的是spring mvc,你可以保留你正在做的事情并添加一个如下所示的控制器:

    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.context.request.WebRequest;
    import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
    
    import javax.validation.ConstraintViolationException;
    
    @ControllerAdvice
    public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
    
        @ExceptionHandler(value = { ConstraintViolationException.class})
        protected ResponseEntity<Object> handleNotAuthenticated(RuntimeException ex, WebRequest request) {
    
            // String message =  extract violation message from exception
    
            return handleExceptionInternal(ex, message, 
              new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request);
        }
    
    }
    

    添加逻辑以从异常中提取消息并将HttpStatus更改为您喜欢的消息 . 该消息将在您的回复正文中返回 .

    如果您可以在DTO上设置约束,则可以在控制器中使用@Valid注释,如下所示:

    @RequestMapping(value = "/stepoption", method = RequestMethod.POST)
    public String setOption(@Valid ExecutionStepOption  stepoption) {
    
            return "whatever";
    
    }
    

    这将返回自定义消息 .

  • 1

    我在用

    @ExceptionHandler(value = { ConstraintViolationException.class})
        @ResponseBody 
        ResponseEntity<Object> handleNotAuthenticated(RuntimeException ex, WebRequest request) {
            return new ResponseEntity<Object>(new Basis(ex.getMessage()), HttpStatus.NOT_ACCEPTABLE);
        }
    

    这与@BillFromHawaii正在使用的非常相似

相关问题