NULLをPOSTした時点でStringとして認識されてしまう
Spring Bootにおけるフォームから値をPOSTする際の挙動になりますが、Integer型の変数にNULLを送信すると以下のようなエラーが発生してしまいます。
Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Integer' for property 'id'; nested exception is java.lang.NumberFormatException: For input string: "null"
これはAPIによる送信でも通常のformからの送信でも同じです。
必ずしも値が入るわけではない項目というものは存在するものですし、そのような場合はNULLにしておきたいこともあります。
しかし、残念ながらPOSTされる項目の型を厳密にチェックするSpring Bootのフォームでは、NULLを送信した時点でString型と識別されてしまうのです。
数値(Integer)型の項目で空の可能性がある場合
例えば以下のように、idというInteger型の変数があるとします。
private Integer id;
何らかの数値をPOSTする必要がありますが、空の可能性もあるとします。
そのような時は、NULLではなく空('')をPOSTしましょう。
AjaxでPOSTする時の例
一例としてAjaxでPOSTする時のパターンを列挙します。
Vue.jsでaxiosを使用しているものとします。
let params = new FormData() // この書き方か params.append('id', this.id !== null ? this.id : '') // この書き方 param.append('id', this.id || '') this.axios.post('/api/test/post', params, {}) .then(response => { ・ ・ ・ }) .catch(error => { ・ ・ ・ })
Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
- 作者:株式会社NTTデータ
- 発売日: 2016/07/21
- メディア: 大型本
- 作者:掌田津耶乃
- 発売日: 2017/05/09
- メディア: Kindle版
はじめてのSpring Boot―スプリング・フレームワークで簡単Javaアプリ開発 (I・O BOOKS)
- 作者:俊明, 槙
- 発売日: 2016/09/01
- メディア: 単行本
- 作者:Walls, Craig
- 発売日: 2016/01/03
- メディア: ペーパーバック