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

Ali*_*aka 30 java rest javax.ws.rs queryparam

例如,具有以下Java休息定义:

@GET
@Path("/something")
public String somthing(
    @QueryParam("valString") String valString,
    @QueryParam("valInt") int valInt,
    @QueryParam("valBool") boolean valBool
) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

并调用:

curl -X GET 127.0.0.1/something
Run Code Online (Sandbox Code Playgroud)

如果未在调用中指定,参数值将是什么?(valString =?,valInt =?,valBool =?)

cas*_*lin 68

简短的回答

参数值为:

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

更长的答案

引用有关提取请求参数Java EE 7教程:

如果@DefaultValue在与结合不使用@QueryParam,且查询参数不存在于该请求,则该值将是一个空集List,SetSortedSet; null对于其他对象类型; 和原始类型的默认值.

Oracle 的Java教程中描述了基本类型的默认值:

 Primitive       Default Value
-------------------------------
 byte            0
 short           0
 int             0
 long            0L
 float           0.0f
 double          0.0d
 char            '\u0000'
 boolean         false
Run Code Online (Sandbox Code Playgroud)

如您所知,可以使用以下@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) {
    ....
}
Run Code Online (Sandbox Code Playgroud)