簡體   English   中英

Spring 引導驗證 - 如何在 MethodArgumentNotValidException 處理程序中檢索輸入消息

[英]Spring Boot Validation - How to retrieve input message in MethodArgumentNotValidException handler

我正在使用spring-boot-starter-validation依賴項為我的應用程序驗證 java bean

我的 Controller 代碼如下

@PostMapping("/testMessage")
    ResponseEntity<String> testMethod(@Valid @RequestBody InternalMsg internalMsg) {
        return ResponseEntity.ok("Valid Message");
    }

內部消息 class

public class InternalMsg implements Serializable {
    @NotNull(message = "Msg Num is a required field")
    private String msgNumber;
    @NotEmpty(message = "Activity Name is a required field")
    private String activityName;
}

InternalMsg 樣本輸入 JSON

{
    "MSGNUMBER": "12345",
    "ACTIVITYNAME": "",
}

我的處理程序代碼如下

@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<InternalMsgResponse> handleValidationExceptions(
        MethodArgumentNotValidException ex) {
    InternalMsgResponse msg = new InternalMsgResponse();
    ex.getBindingResult().getAllErrors().forEach((error) -> {
        String errorMessage = error.getDefaultMessage(); // Error Message
        ack.setStatusNotes(errorMessage);
    });
    return ResponseEntity.ok().body(msg);
}

根據示例輸入,活動名稱為空,因此我收到一條驗證錯誤消息,即“活動名稱是必填字段”。

對於其他一些處理,我需要在處理程序中獲取輸入 Msg 的值,即我想獲取 msgNumber 值(12345),它是一個 VALID 值。

可能嗎? 如果是這樣,請指導如何在處理程序中檢索這些值。

你可以打電話

ex.getTarget()

這將返回 object。 然后簡單地將其轉換為InternalMsg

如果您使用的是 2.4.x 之前的舊 Spring 引導版本,那么您必須調用

ex.getBindingResult().getTarget()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM