Par exemple, ayant la définition Java rest suivante:
@GET
@Path("/something")
public String somthing(
@QueryParam("valString") String valString,
@QueryParam("valInt") int valInt,
@QueryParam("valBool") boolean valBool
) {
...
}
Et invocation:
curl -X GET 127.0.0.1/something
Quelles seront les valeurs des paramètres s'ils ne sont pas spécifiés dans l'invocation? (ValString =?, ValInt = ?, valBool =?)
Les valeurs du paramètre seront:
valString
: null
valInt
: 0
valBool
: false
Citant le tutoriel Java EE 7 à propos de extraction des paramètres de requête :
Si
@DefaultValue
n'est pas utilisé avec@QueryParam
, et le paramètre de requête n’est pas présent dans la demande, la valeur sera une collection vide pourList
,Set
ouSortedSet
;null
pour les autres types d'objet; et la valeur par défaut pour les types primitifs.
Les valeurs par défaut des types primitifs sont décrites dans le tutoriels Java d’Oracle:
Primitive Default Value
-------------------------------
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
boolean false
Comme vous le savez déjà, ce comportement peut être modifié en utilisant le @DefaultValue
annotation comme suit:
@GET
@Path("/foo")
public String myMethod(@DefaultValue("foo") @QueryParam("valString") String valString,
@DefaultValue("1") @QueryParam("valInt") int valInt,
@DefaultValue("true") @QueryParam("valBool") boolean valBool) {
....
}
les valeurs seront null
, 0
, false
, c’est-à-dire les valeurs par défaut pour les variables non initialisées de ces types. Si le client ne met pas les paramètres dans l'URL et que le service ne spécifie pas de valeurs par défaut, le service obtiendra le Java par défaut pour les variables non initialisées.