Spring: 异常处理程序无法捕获错误的枚举值异常
Spring: 异常处理程序无法捕获错误的枚举值异常
当调用RESTful应用程序的myPostMethod时,我得到了一个"400 bad request"的错误,没有响应体。方法定义如下:
@PostMapping() public MyResponseDTO myPostMethod( @Parameter(description = "Paramdescription") @PathVariable String tokenParam, @RequestBody MyRequestDTO requestBody ) { //填充响应... return new MyResponseDTO(datafilled); }
MyRequestDTO的字段定义如下:
public class MyRequestDTO extends BaseDTO { ...... @Override public ExpType getExpType() { return super.getExpType(); } } public enum ExpType { VALUE1, VALUE2, VALUE3 }
当请求的值不包含在枚举中时(例如VALUE5),会出现错误。我正在使用以下代码:
@ControllerAdvice public class GlobalControllerExceptionHandler extends ResponseEntityExceptionHandler
如此处所建议的,我使用了带有@ControllerAdvice注解的GlobalControllerExceptionHandler。
定义了一个捕获所有异常的方法如下:
@ExceptionHandler(Exception.class) @ResponseBody ResponseEntity
但似乎该方法并未被调用。对于这种情况,正确的处理程序定义应该是什么?
提前感谢。
问题出现的原因是Spring的异常处理程序无法捕获错误的枚举值异常。解决方法是添加一个重写的处理程序来处理HttpMessageNotReadableException异常。具体操作是将以下代码添加到Spring配置文件中:
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(HttpMessageNotReadableException.class) public ResponseEntityhandleHttpMessageNotReadableException(HttpMessageNotReadableException ex) { ErrorResponse errorResponse = new ErrorResponse(HttpStatus.BAD_REQUEST.value(), "Invalid request body"); return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST); } }
这样,当出现HttpMessageNotReadableException异常时,将会返回一个包含错误信息的ErrorResponse对象,并设置响应状态为400(Bad Request)。
希望我的回答对您有帮助。如果您认为我的回答有用,请给我一些声誉值。