SpringでJSON受信時に400エラーが返される問題
ブラウザからajax でJSONを送信したときに、サーバーから400エラーが返されてオブジェクトの追加や更新ができない問題が発生した。
サーバー側ではまったくログが表示されていないけど、ブラウザ側には400エラーが返されている。
HTMLの中にはこんなメッセージが。
The request sent by the client was syntactically incorrect
クライアントから送信したリクエストが変だと怒られてるっぽい。
原因がわからなくてぐぐりまくってようやくわかったのが、クライアントから送信したJSONには、オブジェクトのプロパティのうち一部が存在してないことによるエラーらしかった。
そのオブジェクトにはListメンバーが存在していて、それに対応する要素がJSONになかったからエラーになっているらしい。
@Entity @Table(name = "hoge") public class Hoge { @Id @Column(name = "id", unique = true, nullable = false) @GeneratedValue private long id; @Column(name = "name") private String name; @ElementCollection @Transient private List<Hoge> childs; // getter/setter }
要素が足りないのならと、最初はJSONにchildsを追加してみたけど、状況はまったく変わらず。
さらにぐぐってたら、JSONに要素が含まれていなくても無視するようにするには、クラスに @JsonIgnoreProperties アノテーションをつければいいみたいな情報を発見した。
≫jackson - Spring MVC : The request sent by the client was syntactically incorrect - Stack Overflow
@Entity @Table(name = "hoge") @JsonIgnoreProperties(ignoreUnknown = true) public class Hoge { @Id @Column(name = "id", unique = true, nullable = false) @GeneratedValue private long id; @Column(name = "name") private String name; @ElementCollection @Transient private List<Hoge> childs; // getter/setter }
これでエラーが出なくなった。