Red Hat Training

A Red Hat training course is available for Red Hat Fuse

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 或 field 之前出现,它将生效。相对于附带的注入注解的 @DefaultValue 注释的位置无关紧要。

@DefaultValue 注释采用单参数。如果无法根据注入注解提取正确的数据,则此参数是注入到字段的值。该值可以是任何 String 值。该值应该与关联字段的类型兼容。例如,如果关联字段类型为 int,则默认值 blue 除外。

处理列表和集合

如果注解的参数的类型,bean 或 field 为 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 请求会用其中一个 ID 返回 Fomóiri。

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