Springで_methodがputやpatchのときにリソースオブジェクトに値がマッピングされない問題(解決済み)
対象はSpring framework 4.3.10, Spring Boot 1.5.5, 1.5.6。
こういう単純なREST APIがあります。
@SpringBootApplication @RestController public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @PatchMapping("") public String patch(TestResource testResource) { return "PATCH: " + testResource.getValue(); } } class TestResource { private String value; public String getValue() { return value; } public void setValue(final String value) { this.value = value; } }
ちゃんとPATCH
メソッドでリクエストを投げれば問題ないのですが
$ curl -X PATCH http://localhost:8080 -d 'value=HELLO' PATCH: HELLO
POST
メソッド + _method=patch
指定で投げるとTestResource
クラスのvalue
がnull
になってしまいます。
$ curl -X POST http://localhost:8080 -d '_method=patch' -d 'value=HELLO' PATCH: null
これはどうやらSpring自体のバグっぽくて(https://jira.spring.io/browse/SPR-15828)、Spring 4.3.11で修正されているので、Spring 4.3.10の使用を避けます。 スナップショットですがSpring Boot 1.5.7を使うか、Springのバージョンを4.3.11.BUILD-SNAPSHOTと直接指定してやればOKです。