未指定@DefaultValue 时@QueryParam 的默认值是什么?
What are the default values for @QueryParam when @DefaultValue is not specified?
例如,具有以下 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=?)
值将为 null
、0
、false
,即这些类型的未初始化变量的默认值。如果客户端没有把参数放在 URL 中并且服务没有指定默认值,服务将得到的是 Java 个未初始化变量的默认值。
简答
参数值将为:
valString
: null
valInt
: 0
valBool
: false
答案有点长
引用 Java EE 7 tutorial about extracting request parameters:
If @DefaultValue
is not used in conjunction with @QueryParam
, and
the query parameter is not present in the request, the value will be
an empty collection for List
, Set
, or SortedSet
; null
for
other object types; and the default for primitive types.
原始类型的默认值在 Oracle 的 Java Tutorials 中描述:
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) {
....
}
例如,具有以下 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=?)
值将为 null
、0
、false
,即这些类型的未初始化变量的默认值。如果客户端没有把参数放在 URL 中并且服务没有指定默认值,服务将得到的是 Java 个未初始化变量的默认值。
简答
参数值将为:
valString
:null
valInt
:0
valBool
:false
答案有点长
引用 Java EE 7 tutorial about extracting request parameters:
If
@DefaultValue
is not used in conjunction with@QueryParam
, and the query parameter is not present in the request, the value will be an empty collection forList
,Set
, orSortedSet
;null
for other object types; and the default for primitive types.
原始类型的默认值在 Oracle 的 Java Tutorials 中描述:
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) {
....
}