47.2.5. 指定要注入的默认值

概述

要为更可靠的服务实现提供,您可能需要确保将任何可选参数设置为默认值。这在输入长 URI 字符串以来从查询参数和列表参数中获取的值特别有用。您可能还想为从 cookie 中提取的参数设置默认值,因为请求的系统可能没有正确的信息来构造带有所有值的 cookie。

javax.ws.rs.DefaultValue 注解可以和以下注入注解结合使用:

  • @PathParam
  • @QueryParam
  • @MatrixParam
  • @FormParam
  • @HeaderParam
  • @CookieParam

@DefaultValue 注释指定在请求中不存在与注入注释对应的数据时将使用的默认值。

语法

设置参数的默认值的语法 显示使用 @DefaultValue 注释的语法。

设置参数的默认值的语法

import javax.ws.rs.DefaultValue;
  ...
  void resourceMethod(@MatrixParam("matrix")
                      @DefaultValue("value)
                      int someValue, ... )
  ...

该注释必须在参数、bean 或 字段之前使用,它将起作用。相对于带注入注解的 @DefaultValue 注释的位置无关紧要。

@DefaultValue 注释使用一个参数。此参数是根据注入注解提取正确的数据,则将注入字段的值。该值可以是任意 String 值。该值应当与关联字段的类型兼容。例如,如果关联的字段是 int,则默认值 blue 会导致异常。

处理列表和集合

如果注解参数的类型,an 或字段是 List、Set 或 SortedSet,则生成的集合将具有从提供的默认值映射的单个条目。

示例

设置默认值 显示使用 @DefaultValue 为注入值的字段指定默认值的两个示例。

设置默认值

import javax.ws.rs.DefaultValue;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/monster")
public class MonsterService
{

  @Get
  public Monster getMonster(@QueryParam("id") @DefaultValue("42") int id,
                            @QueryParam("type") @DefaultValue("bogeyman") String type)
  {
    ...
  }

  ...
}

GET 请求发送到 baseURI/monster 时,调用 设置默认值 中的 getMonster() 方法。这个方法需要两个查询参数,即 idtype,并附加到 URI。因此,使用 URI baseURI/monster?id=1&type=fomóiriGET 请求会返回 Fomóiri,其 ID 为 1。

由于 @DefaultValue 注释都放在这两个参数上,因此如果查询参数被省略,则 getMonster() 方法可以正常使用。发送到 baseURI/monster GET 请求等同于使用 URI baseURI/monster?id=42&type=bogeyman 的 GET 请求。