异常处理程序在控制器中不起作用



我想用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-mvchttps://www.baeldung.com/spring-response-status-exception

最新更新