未指定@DefaultValue时,@QueryParam的默认值是什么?

2022-08-31 20:11:36

例如,具有以下 Java rest 定义:

@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=?)


答案 1

简短的回答

参数值将为:

  • valString:null
  • valInt:0
  • valBool:false

更长的答案

引用 Java EE 7 教程中有关提取请求参数的内容

如果未与 结合使用,并且请求中不存在查询参数,则该值将是 、 或 ; 的空集合。 对于其他对象类型;和基元类型的默认值。@DefaultValue@QueryParamListSetSortedSetnull

基元类型的默认值在 Oracle 的 Java 教程中进行了描述:

 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) {
    ....
}

答案 2

这些值将是 、 、 、 ,即这些类型的非初始化变量的默认值。如果客户端未将参数放在 URL 中,并且服务未指定缺省值,则服务将获得未初始化变量的 Java 缺省值。null0false