![](/img/trans.png)
[英]404 Error when invoke a Rest API in Controller in SpringBoot
[英]How to invoke an overridden handleMethodArgumentNotValid in a SpringBoot REST Api?
我正在努力在我的 Spring Boot REST api 中調用被覆蓋的 MethodArgumentNotValidException。 我的其他異常處理程序就像一個魅力,但是覆蓋標准 handleMethodArgumentNotValid 永遠不會被觸發?
有人知道我錯過了什么嗎?
波喬
public class FundsConfirmationRequest {
@NotNull(message = "Required Parameter: Account Identifier.")
private String accountId;
@NotNull(message = "Required Parameter: Transaction Amount.")
@Digits(integer=12, fraction=5, message = "Fractions limited to 5 digits.")
private BigDecimal amount;
@NotNull(message = "Required Paramater: Currency Code.")
@Size(min = 3, max = 3, message = "Use ISO4217 Currency Code standard.")
private String ccy;
private String cardNumber;
private String payee;
public FundsConfirmationRequest() { }
}
控制器方法:
@RestController("fundsConfirmationController")
@RequestMapping(
value="/accounts/{accountId}/funds-confirmations"
)
public class FundsConfirmationController implements FundsConfirmationControllerI {
@GetMapping(
headers = {"X-CAF-MSGID", "X-AccessToken"},
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<?> fundsConfirmation(@RequestHeader(value="X-CAF-MSGID") String messageId,
@RequestHeader(value="X-AccessToken") String accessToken,
@Valid FundsConfirmationRequest requestParams) throws FIClientException, FIParseException {
通過@RestControllerAdvice 的異常處理程序
@RestControllerAdvice
public class FundsConfirmationExceptionHandler extends ResponseEntityExceptionHandler {
//Existing Exception Handlers
@Override
public ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
System.out.println("Custom handleMethodArgumentNotValid method");
FundsConfirmationError responseBody = new FundsConfirmationError(HttpStatus.BAD_REQUEST.toString(), "Input Validation Failed. Parameter.: " + ex.getParameter().getParameterName() + " Value.: " + ex.getParameter().getParameter().toString() + " " + ex.getMessage(), Severity.ERROR.toString(), Sources.LOCAL_CAF_API.toString() );
return ResponseEntity
.status(HttpStatus.BAD_REQUEST)
.header("X-CAF-ResponseID", request.getHeader("X-CAF-MSGID"))
.body(responseBody);
}
顯然,這是由於一些 Spring 的“魔法”而發生的。 這涉及到我不太熟悉的各種概念,因為框架“隱藏”了這種復雜性。
在我的示例中,我有一個“GET”請求,我將 pathParams/requestParams 映射到一個復雜對象。 另外,我想對這些參數進行驗證。
然而,由於“數據綁定到復雜對象”在 Spring 中的工作方式,不需要注釋。 因此,這是“數據綁定”而不是“方法映射”。 此特定情況觸發的結果異常不是 MethodArgumentNotValid 而是 BindException。
Spring 如何在 REST 調用中准確地將數據映射到對象取決於各種事物,例如 ContentType、Annotations Used,...
我認為您需要使用@ControllerAdvice
添加@Order(Ordered.HIGHEST_PRECEDENCE)
注釋
@Order(Ordered.HIGHEST_PRECEDENCE)
@RestControllerAdvice
public class FundsConfirmationExceptionHandler extends ResponseEntityExceptionHandler
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.