[JAVA] Anfangswert, wenn die Spring-Anforderung keine Eigenschaft des Formularobjekts enthält

Hintergrund

Wenn ich getrennt vom Frontend arbeite, erhalte ich manchmal Anfragen, die sich von meinen Erwartungen unterscheiden.

Backend "Nicht verwendete Eigenschaften mit Nullwerten senden!" Frontend "Ich habe versucht, nicht verwendete Eigenschaften ohne Schlüssel zu senden!"

... Was wäre in einer Variablen, wenn es keine Eigenschaften gäbe?

Bestätigung

** Mit Spring Boot 2.0.5 überprüft **

Da es eine große Sache ist, habe ich es mit verschiedenen Typen überprüft.

** Formularklasse **


public class TestRequest {

    //Grunddatentyp
    byte reqByte;
    short reqShort;
    int reqInt;
    long reqLong;
    float reqFloat;
    double reqDouble;
    char reqChar;
    boolean reqBoolean;

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

Für POST

Regler


@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());
    }
}

Versuchen Sie, einen JSON ohne Eigenschaften per POST auf diesen Controller zu werfen. Ergebnis

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

Es enthält denselben Wert wie der Anfangswert, als die Variable deklariert wurde. Da der Referenztyp null enthält, ist dies derselbe wie wenn der Eigenschaftswert des Anforderungs-JSON null ist.

Für GET

Ich habe das gleiche mit GET versucht.

Regler


@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());
    }
}

Versuchen Sie, diesen Controller mit GET ohne Anforderungsparameter anzufordern. Ergebnis

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

Es ist das gleiche wie im Fall von POST.

Fazit

Wenn die Anforderung keine Formularobjekteigenschaft hat, wird der gleiche Anfangswert wie beim Deklarieren der Variablen eingegeben.

Recommended Posts

Anfangswert, wenn die Spring-Anforderung keine Eigenschaft des Formularobjekts enthält
Wenn im Docker-Protokoll keine Ausgabe für stdout vorhanden ist
So geben Sie den Wert aus, wenn sich ein Array im Array befindet
Wirf eine Ausnahme und fange, wenn es keinen Handler gibt, der dem Pfad im Frühjahr entspricht
Punkte beim Zuordnen von Wertobjekten in MyBatis
ORA-08177, wenn Spring Batch kontinuierlich in Oracle ausgeführt wird
Wertobjekt in 3 Minuten
So lösen Sie das Problem, wenn der Wert nicht gesendet wird, wenn das Formular in Schienen deaktiviert und gesendet wird
[Ruby] Denken, wenn sich vor der Methode kein Empfänger befindet (wie es aussieht)
Ich habe einen Fehler bekommen! * Es gibt keine interaktive Anforderungsvorlage
Warum gibt es in C / C ++ keinen vorzeichenlosen Rechtsverschiebungsoperator?
ProxyFactory ist praktisch, wenn Sie AOP mit Spring testen möchten!
Formular, das den Wert des sich wiederholenden Elements in Spring MVC erhält
[Swift] Vielmehr ist es sinnvoll, var zu vermeiden und nur dann mit let zu deklarieren, wenn die Zuweisung des Anfangswertes einen Zweig enthält.