LoginSignup
2
0

More than 5 years have passed since last update.

Spring リクエストにフォームオブジェクトのプロパティが無い場合の初期値

Last updated at Posted at 2018-12-09

背景

フロントエンドと分業して作業していると、思ってたのと違うリクエストが飛んでくることがたまにある。

バックエンド「使わないプロパティは値をnullにして送ってきてね!」
フロントエンド「使わないプロパティはキー無しで送るようにしました!」

・・・プロパティ無かった場合って、変数に何が入るんだっけ?

確認

Spring Boot 2.0.5 で確認してます

せっかくなので、色んな型で確認してみた。

フォームクラス


public class TestRequest {

    // 基本データ型
    byte reqByte;
    short reqShort;
    int reqInt;
    long reqLong;
    float reqFloat;
    double reqDouble;
    char reqChar;
    boolean reqBoolean;

    // 参照型
    Byte reqByteWrapper;
    Short reqShortWrapper;
    Integer reqIntWrapper;
    Long reqLongWrapper;
    Float reqFloatWrapper;
    Double reqDoubleWrapper;
    Character reqCharWrapper;
    Boolean reqBooleanWrapper;
    String reqString;
    Object reqObject;
}

POSTの場合

コントローラ


@RestController
@RequestMapping("/api/test")
public class TestController {

    @PostMapping("/post")
    public void postTest(@RequestBody TestRequest request) {
        System.out.println("byte: " + request.getReqByte());
        System.out.println("short: " + request.getReqShort());
        System.out.println("int: " + request.getReqInt());
        System.out.println("long: " + request.getReqLong());
        System.out.println("float: " + request.getReqFloat());
        System.out.println("double: " + request.getReqDouble());
        System.out.println("char: " + request.getReqChar());
        System.out.println("boolean: " + request.isReqBoolean());
        System.out.println("Byte: " + request.getReqByteWrapper());
        System.out.println("Short: " + request.getReqShortWrapper());
        System.out.println("Integer: " + request.getReqIntWrapper());
        System.out.println("Long: " + request.getReqLongWrapper());
        System.out.println("Float: " + request.getReqFloatWrapper());
        System.out.println("Double: " + request.getReqDoubleWrapper());
        System.out.println("Character: " + request.getReqCharWrapper());
        System.out.println("Boolean: " + request.getReqBooleanWrapper());
        System.out.println("String: " + request.getReqString());
        System.out.println("Object: " + request.getReqObject());
    }
}

このコントローラに対し、プロパティ無しのJSONをPOSTで投げてみる。
結果

byte: 0
short: 0
int: 0
long: 0
float: 0.0
double: 0.0
char:  
boolean: false
Byte: null
Short: null
Integer: null
Long: null
Float: null
Double: null
Character: null
Boolean: null
String: null
Object: null

変数宣言した時の初期値と同じ値が入っていますね。
参照型はnullが入るので、リクエストJSONのプロパティ値がnullの時と同じです。

GETの場合

GETでも同じことやってみました。

コントローラ


@RestController
@RequestMapping("/api/test")
public class TestController {

    @GetMapping("/get")
    public void getTest(TestRequest request) {
        System.out.println("byte: " + request.getReqByte());
        System.out.println("short: " + request.getReqShort());
        System.out.println("int: " + request.getReqInt());
        System.out.println("long: " + request.getReqLong());
        System.out.println("float: " + request.getReqFloat());
        System.out.println("double: " + request.getReqDouble());
        System.out.println("char: " + request.getReqChar());
        System.out.println("boolean: " + request.isReqBoolean());
        System.out.println("Byte: " + request.getReqByteWrapper());
        System.out.println("Short: " + request.getReqShortWrapper());
        System.out.println("Integer: " + request.getReqIntWrapper());
        System.out.println("Long: " + request.getReqLongWrapper());
        System.out.println("Float: " + request.getReqFloatWrapper());
        System.out.println("Double: " + request.getReqDoubleWrapper());
        System.out.println("Character: " + request.getReqCharWrapper());
        System.out.println("Boolean: " + request.getReqBooleanWrapper());
        System.out.println("String: " + request.getReqString());
        System.out.println("Object: " + request.getReqObject());
    }
}

このコントローラに対し、リクエストパラメータ無しでGETでリクエストしてみます。
結果

byte: 0
short: 0
int: 0
long: 0
float: 0.0
double: 0.0
char:  
boolean: false
Byte: null
Short: null
Integer: null
Long: null
Float: null
Double: null
Character: null
Boolean: null
String: null
Object: null

POSTの場合と一緒ですね。

結論

リクエストにフォームオブジェクトのプロパティが無かった場合は、変数宣言時と同じ初期値が入る。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0