Spring Boot @ControllerAdvice异常处理程序未返回HTTP状态文本

pti*_*son 5 java rest spring spring-mvc spring-boot

我有一个GlobalExceptionHandler捕获异常并返回HTTP错误代码的。

@ControllerAdvice
@Component
public class GlobalExceptionHandler {

    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    ...

    // 404 - Not Found
    @ExceptionHandler(NoHandlerFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public void requestHandlingNoHandlerFound(HttpServletRequest request, Exception exception) {
        logger.error("Error Not Found (404): " + exception.getMessage());
    }

    ...

}
Run Code Online (Sandbox Code Playgroud)

这可以正常工作,并显示404。但是HTTP响应看起来像这样:

HTTP/1.1 404 
X-Application-Context: application:8080
Content-Length: 0
Date: Wed, 03 Aug 2016 14:36:52 GMT
Run Code Online (Sandbox Code Playgroud)

但应返回:

HTTP/1.1 404 Not Found
X-Application-Context: application:8080
Content-Length: 0
Date: Wed, 03 Aug 2016 14:36:52 GMT
Run Code Online (Sandbox Code Playgroud)

该Not Found部分丢失。其他错误也一样。例如500 - Internal Server Error

关于如何包含此的任何想法?

更新: 从Spring Boot 1.4.0降级到1.3.7修复了此问题

ips*_*psi 3

从发行说明来看:

服务器头

除非设置了该属性,否则不再设置服务器 HTTP 响应标头server.server-header。

这似乎可能是您问题的原因。

  • 来自http://tomcat.apache.org/tomcat-8.5-doc/changelog.html:RFC 7230 规定客户端应忽略 HTTP/1.1 响应消息中的原因短语。由于原因短语是可选的,Tomcat 不再发送它。 (3认同)