最初的问题是,当我使用“DELETE”方法发送 http 请求时,正文部分无法发送到服务器。
谷歌搜索后,我找到了this article建议修改 server.xml 文件并在 Connector 部分添加 'parseBodyMethods' 可以解决问题:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
parseBodyMethods="POST,PUT,DELETE"
redirectPort="8443" />
但是,因为我使用的是spring的嵌入式tomcat,所以我必须想办法用spring的方式来做同样的事情。所以,我找到了this article这似乎允许我添加 ConnectorCustomizer 并向连接器添加其他属性。以下是我的代码:
public class MyTomcatConnectorCustomizer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer factory) {
if(factory instanceof TomcatEmbeddedServletContainerFactory) {
customizeTomcat((TomcatEmbeddedServletContainerFactory) factory);
}
}
public void customizeTomcat(TomcatEmbeddedServletContainerFactory factory) {
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) factory;
tomcat.addConnectorCustomizers(connector -> {
connector.setAttribute("parseBodyMethods", "POST,PUT,DELETE");
});
}
}
@Bean
MyTomcatConnectorCustomizer myTomcatConnectorCustomizer() {
MyTomcatConnectorCustomizer myTomcatConnectorCustomizer = new MyTomcatConnectorCustomizer();
return myTomcatConnectorCustomizer;
}
但是,同样的问题仍然存在。当我向服务器发送“DELETE”请求时,正文仍然是空的。有没有人以前遇到过同样的问题?帮助表示赞赏!
最佳答案
改变
connector.setAttribute("parseBodyMethods", "POST,PUT,DELETE");
到
connector.setParseBodyMethods("POST,PUT,DELETE")
或者只是
@Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() {
return new TomcatEmbeddedServletContainerFactory(){
@Override
protected void customizeConnector(Connector connector) {
super.customizeConnector(connector);
connector.setParseBodyMethods("POST,PUT,DELETE");
}
};
}
关于Spring boot - Embedded Tomcat - Connector Customizer - 无法添加 parseBodyMethods 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46872237/