Spring boot - Embedded Tomcat - Connector Customizer - 无法添加 parseBodyMethods 属性

标签 spring rest tomcat embedded-tomcat-7 embedded-tomcat-8

最初的问题是,当我使用“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/

相关文章:

python - 如何创建 Perl 代码的 Python 包装器?

java - 在 Tomcat 中使用 Websockets

java - Spring MVC 3 验证 - 找不到默认提供程序

java - Spring security 3.1.4 带有表单登录的多个http元素

spring - 自动将根路径重定向到Spring Boot上下文路径

Java RESTful 服务 - QueryParam 和 PathParam 在使用方面有什么区别?

Spring Boot + Jetty & 热部署

rest - 如何在 Amazon S3 上传后触发 REST 调用

java - 将mysql数据库连接到jsp

eclipse - Eclipse 的 Tomcat 插件的最新版本是什么?