尽管有@ResponseStatus注释,ResponseEntityExceptionHandler不会向客户端发送错误代码

时间:2015-07-22 14:24:18

标签: java spring-mvc exception-handling exceptionhandler

我想阻止spring将Runtimexceptions的完整堆栈跟踪发送到前端。我做了这样的事情:

@ControllerAdvice
public class RestErrorHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    @Override
    protected ResponseEntity<Object> handleExceptionInternal(Exception e, Object body, 
               HttpHeaders headers, HttpStatus status, WebRequest request) {
        logger.error("Error happened while executing controller.", e);
        return null;
    }
}

我的目标是只向前端发送错误代码而不发送任何其他内容。上述方法将状态200 OK返回到前端。应该返回什么而不是null?

1 个答案:

答案 0 :(得分:1)

使用@ResponseStatus,如果仅提供value,则使用HttpServletResponse.setStatus(int)

  

此方法用于在没有时设置返回状态代码   错误(例如,对于SC_OK或SC_MOVED_TEMPORARILY状态   码)。

     

如果使用此方法设置错误代码,则使用容器   错误页面机制不会被触发。如果有错误并且   调用者希望调用Web中定义的错误页面   应用程序,然后必须使用 sendError(int,java.lang.String)   代替

如果同时提供reason,则会使用HttpServletResponse.sendError(int, String)

@ControllerAdvice
public class RestErrorHandler {
    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR, reason = "INTERNAL_SERVER_ERROR")
    @ExceptionHandler(Exception.class)
    public void handleConflict(Exception e) {
        // log me
    }
}