我想阻止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?
答案 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
}
}