duk*_*ash 6 java json exception-handling spring-mvc spring-restcontroller
我有一个Spring控制器注释,@RestController
它返回JSON.我还有一个带有@ControllerAdvice
与@ExceptionHandler
一些自定义异常相关的s 注释的类.我正在使用Tomcat来提供这个RESTful API.我希望有任何非自定义异常,例如来自第三方库或NullPointerException的异常被捕获并返回状态500 - 内部服务器错误为JSON,带有消息而不是显示错误的HTML页面.
如果我@ExceptionHandler(Exception.class)
在控制器建议中使用它,它将接管所有Spring异常,如MissingPathVariableException.class,这是不理想的.我已经尝试过扩展Spring的ResponseEntityExceptionHandler,但是这个类没有用@ResponseBody注释,所以不返回JSON.
对于未捕获的异常返回JSON,可以使用以下代码:
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
@ControllerAdvice
@RestController
public class GlobalExceptionHandler {
private class JsonResponse {
String message;
public JsonResponse() {
}
public JsonResponse(String message) {
super();
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
@ExceptionHandler(value = Exception.class)
public ResponseEntity<JsonResponse> handleException(Exception e) {
return new ResponseEntity<JsonResponse>(new JsonResponse(e.getMessage()), HttpStatus.BAD_REQUEST);
}
}
Run Code Online (Sandbox Code Playgroud)
抛出异常时的JSON结果:
{
"message": "Something wrong!"
}
Run Code Online (Sandbox Code Playgroud)
您可以使用此链接获取有关Spring异常处理的更多详细信息(带有代码示例)。
归档时间: |
|
查看次数: |
2654 次 |
最近记录: |