我正在尝试在 spring-data-rest 中进行验证。从文档中,您只需要提供一个验证器,我已经让它工作了,但是当一个验证约束被成功捕获/处理时,我会得到一个带有堆栈跟踪的 500 错误页面。
在配置类 RepositoryRestMvcConfiguration 中,它有一个 validationExceptionHandler,看起来它应该得到这样的验证错误以返回 400 而不是 500。它也是一个延迟加载的 bean。
我的设置不正确吗?还是有另一种方法可以让 spring-data-rest 返回 400 而不是 500?
我正在使用 spring-data-rest 版本 2.0.0 Release
由tomcat返回的堆栈跟踪:
HTTP Status 500 - Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [test.domain.Account] during persist time for groups [javax.validation.groups.Default, ]
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes [test.domain.Account] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='size must be between 0 and 10', propertyPath=login, rootBeanClass=class test.domain.Account, messageTemplate='{javax.validation.constraints.Size.message}'}
]
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
账户实体:
@Entity
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@Column(unique = true)
@Size(max = 10)
String login;
}
RestMvcConfig:
@Configuration
public class RestExporterRestConfig extends RepositoryRestMvcConfiguration {}