我已經被這個問題困住了一段時間。我正在使用LocalDate通過 REST 端點接受用戶的日期輸入。我想驗證此日期以檢查它是否是null、empty字串或invalid日期,例如Feb 30. 我已經設法讓它為有效的日期值作業,但在輸入無效的情況下,它會拋出400 Bad Request來自 Java 內部類的回應,所以我無法控制它。如果您能告訴我我是否遺漏了什么或做錯了什么,我將不勝感激。
這在我的控制器中稱為方法 - 用@Valid 注釋:
@RequestMapping(method = RequestMethod.PUT, value="/add")
public ResponseEntity<PSResponse> add(@Valid @RequestBody PSRequest request) throws Exception {
setServiceID(SERVICE_HANDLER_ID);
request.setRequestType("add");
PSResponse response = (PSResponse) invokeInternal(request);
}
這是我的請求物件的類
public class PSRequest {
@NotNull(message = "fromDate cannot be null")
protected LocalDate fromDate;
@NotNull(message = "toDate cannot be null")
protected LocalDate toDate;}
有效的 JSON 輸入
"fromDate":2020-10-16"
"toDate":"2021-10-16"
無效的 JSON 輸入日期格式
"fromDate":null,
"toDate":"2021-02-30"
謝謝!
uj5u.com熱心網友回復:
您所做的沒有任何問題,獲得400 bad request. 為什么?因為您正在使用基于Http協議的Rest Endpoint
ABad request表示您的Http請求由于多種原因不正確,例如:無效引數。最佳實踐是向用戶發送一條明確的訊息,解釋在他向服務器發送請求之后發生了什么。為此,您可以使用RestControllerAdvice攔截所有例外并將其映射到Http狀態代碼。
查看此帖子以獲取更多詳細資訊。
uj5u.com熱心網友回復:
為了抑制內置驗證,您可以String從前端接收,然后才執行您的代碼:LocalDate.parse(fromDate),捕獲DateTimeParseException并根據需要處理它。
另一種選擇是洗掉 @Valid
順便說一句,有什么問題@Valid?反正你不想有400作為回報嗎?!或者你想用 400 控制正文訊息?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/340976.html
