[JAVA] Valeur initiale lorsqu'il n'y a pas de propriété de l'objet de formulaire dans la requête Spring

Contexte

Lorsque je travaille séparément du front-end, je reçois parfois des demandes différentes de ce à quoi je m'attendais.

Backend "Envoyez les propriétés inutilisées avec des valeurs nulles!" Frontend "J'ai essayé d'envoyer des propriétés inutilisées sans clé!"

... Que contiendrait une variable s'il n'y avait pas de propriétés?

Vérification

** Confirmé avec Spring Boot 2.0.5 **

Comme c'est un gros problème, je l'ai vérifié avec différents types.

** Classe de formulaire **


public class TestRequest {

    //Type de données de base
    byte reqByte;
    short reqShort;
    int reqInt;
    long reqLong;
    float reqFloat;
    double reqDouble;
    char reqChar;
    boolean reqBoolean;

    //Type de référence
    Byte reqByteWrapper;
    Short reqShortWrapper;
    Integer reqIntWrapper;
    Long reqLongWrapper;
    Float reqFloatWrapper;
    Double reqDoubleWrapper;
    Character reqCharWrapper;
    Boolean reqBooleanWrapper;
    String reqString;
    Object reqObject;
}

Pour POST

manette


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

Essayez de lancer un JSON sans propriétés à ce contrôleur par POST. résultat

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

Il contient la même valeur que la valeur initiale lorsque la variable a été déclarée. Étant donné que le type de référence contient null, c'est la même chose que lorsque la valeur de propriété de la demande JSON est nulle.

Oublier

J'ai essayé la même chose avec GET.

manette


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

Essayez de demander ce contrôleur avec GET sans paramètres de demande. résultat

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

C'est la même chose que dans le cas de POST.

Conclusion

Si la demande n'a pas de propriété d'objet de formulaire, la même valeur initiale que lors de la déclaration de la variable est entrée.

Recommended Posts

Valeur initiale lorsqu'il n'y a pas de propriété de l'objet de formulaire dans la requête Spring
Lorsqu'il n'y a pas de sortie vers stdout dans le journal du docker
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Lancer une exception et attraper lorsqu'il n'y a pas de gestionnaire correspondant au chemin au printemps
Points lors du mappage d'un objet de valeur dans MyBatis
ORA-08177 lorsque Spring Batch est exécuté en continu dans Oracle
Objet de valeur en 3 minutes
Comment résoudre le problème lorsque la valeur n'est pas envoyée lorsque le formulaire est désactivé dans les rails et envoyé
[Ruby] Penser quand il n'y a pas de récepteur devant la méthode (ça ressemble à)
J'ai une erreur! * Il n'y a pas de modèle de demande interactif
Pourquoi n'y a-t-il pas d'opérateur de décalage à droite non signé en C / C ++?
ProxyFactory est pratique lorsque vous souhaitez tester AOP avec Spring!
Formulaire qui reçoit la valeur de l'élément répétitif dans Spring MVC
[Swift] Au contraire, il est significatif d'éviter var et de le déclarer avec let uniquement lorsqu'il y a une branche dans l'affectation de la valeur initiale.