更改Spring错误的mediatype

时间:2014-05-13 19:30:43

标签: java spring spring-mvc spring-boot

我正在运行一个简单的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配置。

1 个答案:

答案 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