我試圖在spring-data-rest中進行驗證以使其工作。從文檔你只需要一個驗證器可用,並且我已經可以工作了,但是當驗證約束被成功捕獲/處理時,我得到一個帶有堆棧跟蹤的500錯誤頁面。在spring-data-rest中使用驗證器返回http 500而不是400
在配置類RepositoryRestMvcConfiguration中,它有一個validationExceptionHandler,它看起來應該像返回400而不是500那樣驗證錯誤。它也是一個懶加載的bean。
我的設置有誤嗎?還是有另一種方法讓spring-data-rest返回400而不是500?
我使用的是彈簧數據休息版本2.0.0發佈
堆棧跟蹤回被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 {}
它應該返回400,從客戶端是惡意的請求。您可以使用response.setStatus(400)來設置狀態; – Touchstone
是的我同意它應該返回400,我提出的問題是,我不認爲spring-data-rest通過返回400正確地處理這些驗證錯誤,所以我認爲我在配置或validationExceptionHandler中缺少一些東西bean未被加載或使用。 – wenic
由於服務器端的異常(這非常合適),您將得到500。此外,你應該處理這個異常,並手動設置狀態碼爲400. – Touchstone