java - pathparam - ¿Cuáles son los valores predeterminados para @QueryParam cuando no se especifica @DefaultValue?
queryparam java (2)
Respuesta corta
Los valores de los parámetros serán:
-
valString
:null
-
valInt
:0
-
valBool
:false
Respuesta un poco mas larga
Citando el tutorial de Java EE 7 sobre la extracción de parámetros de solicitud :
Si
@DefaultValue
no se usa junto con@QueryParam
, y el parámetro de consulta no está presente en la solicitud, el valor será una colección vacía paraList
,Set
oSortedSet
;null
para otros tipos de objetos; y el valor por defecto para los tipos primitivos.
Los valores predeterminados para los tipos primitivos se describen en los https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html de Oracle:
Primitive Default Value
-------------------------------
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char ''/u0000''
boolean false
Como ya sabe, este comportamiento se puede cambiar usando la anotación @DefaultValue
siguiente manera:
@GET
@Path("/foo")
public String myMethod(@DefaultValue("foo") @QueryParam("valString") String valString,
@DefaultValue("1") @QueryParam("valInt") int valInt,
@DefaultValue("true") @QueryParam("valBool") boolean valBool) {
....
}
Por ejemplo, teniendo la siguiente definición de resto de Java:
@GET
@Path("/something")
public String somthing(
@QueryParam("valString") String valString,
@QueryParam("valInt") int valInt,
@QueryParam("valBool") boolean valBool
) {
...
}
Y la invocación:
curl -X GET 127.0.0.1/something
¿Cuáles serán los valores de los parámetros si no se especifican en la invocación? (valString = ?, valInt = ?, valBool =?)
los valores serán null
, 0
, false
, es decir, los valores predeterminados para las variables no inicializadas de esos tipos. Si el cliente no coloca los parámetros en la URL y el servicio no especifica los valores predeterminados, lo que el servicio obtendrá son los valores predeterminados de Java para las variables no inicializadas.