我正在运行一个简单的spring-boot web应用程序api。问题是当我抛出异常,或者spring抛出异常时,异常总是抛出Http,弹出默认错误页面。 有没有办法让错误默认为另一种mediatype,比如JSON? 基本上我总是想要json,即使是错误。 我不想为每个异常类型编写一个自定义的@ExceptionHandler,因为这很简单..
更新:这是我目前正在尝试的内容:
@ControllerAdvice
@EnableAutoConfiguration
public class ErrorWritter extends ResponseEntityExceptionHandler {
@Override
public ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) {
String response = "{\"status\":\""
+ status.toString()
+ "\",\"generic message\":\""
+ status.getReasonPhrase()
+ "\",\"specific message\":\""
+ ex.getMessage()
+ "\" }";
return new ResponseEntity<Object>(response, headers, status);
}
}
然而,这似乎没有做任何事情。为了让春天认识到我想让它使用它,我需要做些什么吗?
请注意:我使用的是Java配置而不是xml配置。
答案 0 :(得分:0)
以下文章中有相当不错的信息: http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
您可以为错误创建模型,例如:
public class ErrorInfo {
public final String url;
public final String ex;
public ErrorInfo(String url, Exception ex) {
this.url = url;
this.ex = ex.getLocalizedMessage();
}
}
使用它的错误处理程序返回该模型的表示:
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MyBadDataException.class)
@ResponseBody ErrorInfo handleBadRequest(HttpServletRequest req, Exception ex) {
return new ErrorInfo(req.getRequestURL(), ex);
}
如果您想了解@ExceptionHandler在Spring中如何工作的更多详细信息,请查看spring docs: http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-exceptionhandlers