Каковы значения по умолчанию для @QueryParam, если @DefaultValue не указано?
Например, имея следующее определение остатка Java:
@GET
@Path("/something")
public String somthing(
@QueryParam("valString") String valString,
@QueryParam("valInt") int valInt,
@QueryParam("valBool") boolean valBool
) {
...
}
И вызов:
curl -X GET 127.0.0.1/something
Какими будут значения параметров, если они не указаны в вызове? (valString =?, valInt =?, valBool =?)
2 ответа
Короткий ответ
Значения параметра будут:
valString
:null
valInt
:0
valBool
:false
Чуть дольше отвечу
Цитирование учебника по Java EE 7 по извлечению параметров запроса:
Если
@DefaultValue
не используется в сочетании с@QueryParam
, а параметр запроса отсутствует в запросе, значение будет пустой коллекцией дляList
,Set
, или жеSortedSet
;null
для других типов объектов; и значение по умолчанию для примитивных типов.
Значения по умолчанию для примитивных типов описаны в Учебных руководствах по Java от Oracle:
Primitive Default Value
-------------------------------
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
boolean false
Как вы уже знаете, это поведение можно изменить с помощью @DefaultValue
примечание как следующее:
@GET
@Path("/foo")
public String myMethod(@DefaultValue("foo") @QueryParam("valString") String valString,
@DefaultValue("1") @QueryParam("valInt") int valInt,
@DefaultValue("true") @QueryParam("valBool") boolean valBool) {
....
}
Значения будут null
, 0
, false
т.е. значения по умолчанию для неинициализированных переменных этих типов. Если клиент не помещает параметры в URL-адрес, а служба не задает значения по умолчанию, служба получит значения по умолчанию Java для неинициализированных переменных.