48

例如,具有以下 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=?)

4

2 回答 2

98

简短的回答

参数值将是:

  • valStringnull
  • valInt0
  • valBoolfalse

长一点的答案

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

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

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) {
    ....
}
于 2016-02-25T11:08:01.240 回答
2

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

于 2016-02-25T11:05:42.873 回答