親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

Spring BootのFormクラスでIntegerの項目にNULLはPOSTできない


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 Boot プログラミング入門

Spring Boot プログラミング入門

Spring Boot in Action

Spring Boot in Action

  • 作者:Walls, Craig
  • 発売日: 2016/01/03
  • メディア: ペーパーバック