簡體   English   中英

ExceptionHandler 在控制器中不起作用

[英]ExceptionHandler doesn't work in controller

我想用 spring 更改 REST API 請求的返回狀態。

我創建了一個異常類:

public class AutomatedActionValidatorException extends RuntimeException {

    public AutomatedActionValidatorException(String message) {
        super(message);
    }
}

還有一個控制器(評論了我用於測試異常拋出的原始代碼):

@Controller
@RequestMapping("/api/automated_actions")
public class AutomatedActionController {

    @Resource
    private AutomatedActionsService automatedActionsService;

    @Resource
    private AutomatedActionResponseService automatedActionResponseService;

    @Resource
    private AutomatedActionsSchedulingService automatedActionsSchedulingService;

    @ResponseBody
    @RequestMapping(value = "/save_and_run", method = RequestMethod.POST)
    public AutomatedAction saveAndRunAutomatedAction(HttpServletRequest request,
                                                     @RequestBody AutomatedActionRequest automatedActionRequest) {
        throw new AutomatedActionValidatorException("");

//        AutomatedAction automatedAction = saveAutomatedAction(request, automatedActionRequest);
//        automatedActionsSchedulingService.runAutomatedActions(Collections.singletonList(automatedAction));
//        return automatedAction;
    }

    private AutomatedAction saveAutomatedAction(HttpServletRequest request,
                                               @RequestBody AutomatedActionRequest automatedActionRequest) {
        return automatedActionsService.save(automatedActionRequest);
    }


    @ExceptionHandler(value = AutomatedActionValidatorException.class)
    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    @ResponseBody
    public String handleAutomatedActionValidatorException(AutomatedActionValidatorException ex) {
        return ex.getMessage();
    }

調用該端點時,我仍然收到 500 錯誤代碼。

從我添加的日志中, handleAutomatedActionValidatorException方法已被忽略。

我收到的回復是:

{
  errorMessage: "Unexpected error occurred.", data: null, success: false, 
  errorMessageKey: null}
  data: null
  errorMessage: "Unexpected error occurred."
  errorMessageKey: null
  success: false
}

知道我錯過了什么嗎?

謝謝

(我不確定如果客戶端以錯誤的格式發送您的@RequestBody AutomatedActionRequest automatedActionRequest請求,它是否會拋出狀態代碼 500,您可能想要注釋掉此代碼,直到它拋出您正在等待的異常

編輯:如果 RequestBody 格式錯誤,它將丟棄 BAD_REQUEST。 我您的異常 500 必須在您的代碼到達此時之前發生)

如果您沒有在 ExceptionHandler 中做任何特別的事情,也許將您的異常更改為這樣就足夠了:

@ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "Bad request!")
public class AutomatedActionValidatorException extends RuntimeException {

    public AutomatedActionValidatorException(String message) {
        super(message);
    }
}

請檢查它是否有效。 (放入注釋塊您的異常處理程序)

如果您返回代碼 400,那么您就會知道問題出在異常處理程序中。

這些可能對你有幫助:

https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc https://www.baeldung.com/spring-response-status-exception

暫無
暫無

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

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