首页 > 解决方案 > Java Spring - 当@RequestBody为空时抛出处理异常

问题描述

我有一个休息 api Java Spring Boot。我正在POSTapi. 如果正文中有数据,它可以正常工作,但是当没有数据传递时,它会给出400 Bad Request响应:

{
    "timestamp": "2021-05-03T13:32:36.746+0000",
    "status": 400,
    "error": "Bad Request",
    "message": "Required request body is missing: public org.springframework.http.ResponseEntity<com.package.MyResponse> com.package.MyController.getData(com.package.MyRequest)",
    "path": "/api/"
}

如何在响应消息中隐藏package information和?class name它应该返回消息:

"message": "Required request body is missing."

一种选择是在@RequestBody(required=false)内部设置然后手动处理,但我想避免。

如果有人可以提供帮助,那就太好了。谢谢你。

标签: javaspring-boot

解决方案


您可以RestControllerAdvice使用ResponseEntityExceptionHandler. 在实现中覆盖相应的方法并发送您的自定义消息。在您的情况下,方法将handleHttpMessageNotReadable来自ResponseEntityExceptionHandler.

这是示例代码:

/**
 * Intercept exception to response with error
 */
@RestControllerAdvice
public class ApplicationExceptionHandler extends ResponseEntityExceptionHandler {

  /**
   * {@inheritDoc}
   */
  @Override
  protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers,
      HttpStatus status, WebRequest request) {
    // your custom implementation
  }
}

推荐阅读