【问题标题】:What are the default values for @QueryParam when @DefaultValue is not specified?未指定 @DefaultValue 时,@QueryParam 的默认值是什么?
【发布时间】:2016-02-25 10:50:01
【问题描述】:

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

【问题讨论】:

标签: java rest javax.ws.rs queryparam


【解决方案1】:

简答

参数值为:

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

稍长一点的回答

引用Java EE 7 tutorial 关于extracting 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) {
    ....
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 2021-11-15
    • 2014-01-07
    • 2018-10-09
    • 1970-01-01
    • 2014-03-28
    • 2011-01-07
    • 1970-01-01
    • 2015-10-22
    • 2015-10-12
    相关资源
    最近更新 更多