Каковы значения по умолчанию для @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 для неинициализированных переменных.

Другие вопросы по тегам