我在Java Spring Boot
中有一个rest api。我正在向api
发出POST
请求。如果正文中有数据,它可以正常工作,但当没有数据通过时,它会给出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
对其进行扩展。在实现中重写相应的方法并发送自定义消息。在您的情况下,方法将是ResponseEntityExceptionHandler
中的handleHttpMessageNotReadable
。
这是示例代码:
/**
* 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
}
}