我使用以下代码来处理用
RuntimeException
注释的类中所有类型为
@ControllerAdvice
的异常
@ExceptionHandler(RuntimeException.class)
public ResponseEntity<JSONObject> RuntimeExceptionHandler(RuntimeException e) throws JSONException {
JSONObject response = new JSONObject();
response.put("message", e.getMessage());
return new ResponseEntity<JSONObject>(response, HttpStatus.BAD_REQUEST);
}
如果出现
ValidationException
,它会向客户端返回以下响应:
{
"timestamp": 1496377230943,
"status": 500,
"error": "Internal Server Error",
"exception": "javax.validation.ValidationException",
"message": "Name does not meet expectations",
"path": "/signup"
}
这不是我所期望的。状态码不是
BAD_REQUEST
并且 json 与 response
不同。
如果我将
JSONObject
更改为 String
并传入字符串消息而不是 json 对象,则效果很好。我还在 return
语句之前放置了一个断点,并且 response
看起来不错。
注意:还有另一篇文章这里其中:
@ResponseBody
注释该方法,但我没有。JSONObject
如果您需要返回的 JSON 格式,可以快速修复:
@ExceptionHandler(RuntimeException.class)
public ResponseEntity<String> RuntimeExceptionHandler(RuntimeException e) {
JSONObject response = new JSONObject();
response.put("message", e.getMessage());
return new ResponseEntity<String>(response.toString(), HttpStatus.BAD_REQUEST);
}