java - Java Spring - 当@RequestBody为空时抛出处理异常
问题描述
我有一个休息 api Java Spring Boot
。我正在POST
向api
. 如果正文中有数据,它可以正常工作,但是当没有数据传递时,它会给出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)
内部设置然后手动处理,但我想避免。
如果有人可以提供帮助,那就太好了。谢谢你。
解决方案
您可以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
}
}
推荐阅读
- azure - 通过 Terraform 输出多个 Azure 应用服务的主体 ID
- grpc - 如何在 Grpc.AspNetCore.Client 上配置 KeepAlive?
- apache-camel - Apache Camel onExceptionOccurred 组件未按上述时间重新交付
- sql-server - 关于sql server中filesteam数据及其varbinary(max)值的问题
- c# - 注册/使用 Castle.Core.AsyncInterceptor 拦截器
- python - vaex:检查两个帧之间是否相等
- python - tarfile.open() 没有解压到正确的目录路径
- javascript - svg foreignObject 中的视频标签未在 Google Chrome 上正确呈现
- php - 主机离线时如何处理RequestException
- docker - Synology Docker Container 的两个网站路径