1.背景
开发项目时需要和其他平台对接,其他平台需要解析报文,按照他们的规则需返回
HTTP/1.1 200 OK而非HTTP/1.1 200。经协商需我们的项目做出整改。
2.调查
目前我们的项目使用的是springboot2.1.5,而springboot内置tomcat9,而tomcat8.5之后返回头就去掉HttpStatus的reansonPhrase。所以思路就是将项目降版本到tomcat8.0,但是会报错:
Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
所以springboot2.1.5最低支持tomcat8.5。
3.解决
最后解决方案是 springboot2.1.5 + tomcat8.5 +TomcatConfig。
(Tips: springboot2.1.5 + tomcat8.0 +TomcatConfig也是可行的,之前的报错不报了;springboot2.1.5 + tomcat9.0 +TomcatConfig 不可行,虽然项目启动没有问题,但是返回的结果还是HTTP/1.1 200,有可能是TomcatConfig与tomcat9.0的配置不兼容。)
4.解决详情
(1)修改pom.xml
<properties>
<java.version>1.8</java.version>
<tomcat.version>8.5.50</tomcat.version>
</properties>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
(2)添加TomcatConfig.java
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TomcatConfig {
@Bean
public ConfigurableServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers(
//由于工作台要求需返回 HTTP/1.1 200 OK
//开启sendReasonPhrase,springboot 2.1.5 需配合tomcat 8.5
//开启后 HTTP/1.1 200 ->HTTP/1.1 200 OK
connector -> connector.setAttribute("sendReasonPhrase", "true"));
return factory;
}
}