server.xml の場合
Tomcat はデフォルトで PUT と DELETE のリクエストボディが無効になっているらしく POST と同じような感じでフォームデータを PUT, DELETE してもすべてクリアされてしまう。
これを有効にするには server.xml
に以下の様に設定を行う:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
parseBodyMethods="POST,PUT,DELETE"
URIEncoding="UTF-8" />
Spring Boot 組み込み Tomcat の場合
Spring Boot で Application
クラスを実行して組み込みの Tomcat が立ち上がった際もこの設定を有効にしたい。
この場合 application.yaml
ではなく @Configuration
アノテーションを付けたクラスに @Bean
として TomcatServletWebServerFactory
を返すメソッドを書く:
@Configuration
class Configuration {
/**
* 組み込み Tomcat のデフォルトで PUT, DELETE に Request Body が許可されていないので許可する.
*
* @return TomcatServletWebServerFactory
*/
@Bean
fun tomcatEmbeddedServletContainerFactory(): TomcatServletWebServerFactory = object : TomcatServletWebServerFactory() {
override fun customizeConnector(connector: Connector?) {
super.customizeConnector(connector)
connector?.parseBodyMethods = "POST,PUT,DELETE"
}
}
}
Tomcat の他の設定をいじりたい場合も同じようにここに追記することができるようだ。