从异常处理程序返回响应实体 [Spring]

问题描述 投票:0回答:1

我使用以下代码来处理用

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
看起来不错。

注意:还有另一篇文章这里其中:

  1. 没有接受的答案。
  2. 正在用
    @ResponseBody
    注释该方法,但我没有。
  3. 没有使用
    JSONObject
java spring exception
1个回答
5
投票

如果您需要返回的 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);
 }
© www.soinside.com 2019 - 2024. All rights reserved.