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

时间:2016-02-25 10:50:01

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

并且调用:

curl -X GET 127.0.0.1/something

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

2 个答案:

答案 0 :(得分:61)

简短回答

参数值为:

  • valStringnull
  • valInt0
  • valBoolfalse

答案稍长

引用关于Java EE 7 tutorialextracting request parameters

  

如果@DefaultValue未与@QueryParam一起使用,并且   查询参数不在请求中,值为   ListSetSortedSet的空集合; null   其他对象类型;和原始类型的默认值。

基元类型的默认值在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) {
    ....
}

答案 1 :(得分:2)

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