Spring: 异常处理程序无法捕获错误的枚举值异常

10 浏览
0 Comments

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 handleGeneralException(HttpServletRequest request, Exception ex) {
    .....
} 

但似乎该方法并未被调用。对于这种情况,正确的处理程序定义应该是什么?

提前感谢。

0
0 Comments

问题出现的原因是Spring的异常处理程序无法捕获错误的枚举值异常。解决方法是添加一个重写的处理程序来处理HttpMessageNotReadableException异常。具体操作是将以下代码添加到Spring配置文件中:

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(HttpMessageNotReadableException.class)
    public ResponseEntity handleHttpMessageNotReadableException(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)。

希望我的回答对您有帮助。如果您认为我的回答有用,请给我一些声誉值。

0