2017-10-22 3 views
1

Das ursprüngliche Problem ist, wenn ich eine HTTP-Anfrage mit der Methode 'DELETE' gesendet wurde, konnte der Körperteil nicht an den Server gesendet werden.Spring boot - Eingebetteter Tomcat - Connector Customizer - ParsBodyMethods Attribute nicht hinzufügen

Nach Googeln fand ich this article, dass die Datei server.xml schlägt modifizieren und kann ‚parseBodyMethods‘ zum Steckerteil Hinzufügen das Problem lösen:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      parseBodyMethods="POST,PUT,DELETE" 
      redirectPort="8443" /> 

jedoch, weil ich Frühling Embedded tomcat verwenden, Ich muss einen Weg finden, das gleiche im Frühling zu tun. Also, ich habe this article gefunden, das mir erlaubt, ConnectorCustomizer hinzuzufügen und dem Connector zusätzliche Attribute hinzuzufügen. Im Folgenden ist mein Code:

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; 
} 

aber immer noch das gleiche Problem existiert. Der Body ist immer noch leer, wenn ich eine 'DELETE' Anfrage an den Server sende. Ist jemand schon einmal auf dasselbe Problem gestoßen? Hilfe geschätzt!

Antwort

1

Änderung

connector.setAttribute("parseBodyMethods", "POST,PUT,DELETE"); 

zu

connector.setParseBodyMethods("POST,PUT,DELETE") 

oder nur

@Bean 
public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() { 
    return new TomcatEmbeddedServletContainerFactory(){ 
     @Override 
     protected void customizeConnector(Connector connector) { 
      super.customizeConnector(connector); 
      connector.setParseBodyMethods("POST,PUT,DELETE"); 
     } 
    }; 
} 
Verwandte Themen