java 如何在Sping Boot 中创建自定义的“Request Body is Missing”错误

cedebl8k  于 2023-04-04  发布在  Java
关注(0)|答案(2)|浏览(123)

要创建自定义错误,我们需要知道它是什么类型的Exception错误。问题是我无法确定“请求主体缺少一个”是什么类型的错误。起初我以为它被归类为MethodArgumentNotValidException,但它没有捕获错误。
我为错误创建控制器建议

@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException exception, HttpHeaders headers, HttpStatus status, WebRequest request){
        MyObject<Object> error = MyObject.failure("Invalid Parameter");
        log.error("argument invalid", exception);
        return new ResponseEntity<Object>(error, new HttpHeaders(), HttpStatus.OK);
}

该控制器

@PostMapping(value = "/tes")
public MyObject<MyRes> myTest(@Valid @RequestBody MyReq req, HttpServletRequest hsReq) throws Exception{
        return myService.updateTestData(req);
}

我使用Postman来调用API。

*带括号初审

*二审-无括号

未发生错误。
我的问题是,如何处理这个错误,当没有请求体附加在所有的请求.我想返回“无效参数”错误在这种情况下太.

rfbsl7qr

rfbsl7qr1#

这可能有点晚,但你可能想尝试在你的ControllerAdvice类中添加这个,这就是我在尝试发送空请求时捕获 Required request body is missing 错误的原因。

@ExceptionHandler(HttpMessageNotReadableException.class)
public ResponseEntity<Object> handleMissingRequestBody(HttpMessageNotReadableException ex) {
    return new ResponseEntity<Object>(ex.getMessage(), HttpStatus.BAD_REQUEST);
}
a8jjtwal

a8jjtwal2#

一种方法是覆盖ResponseEntityExceptionHandler中的handleHttpMessageNotReadable方法。

@Slf4j
@RestControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {

    // 400 BAD REQUEST HANDLER
    @Override
    protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
        val errorMessage = "Request body is missing";
        log.error("400 BAD REQUEST: " + errorMessage);
        return this.handleExceptionInternal(ex, errorMessage, headers, status, request);
    }
}

相关问题