JBoss.orgCommunity Documentation

第 14 章 Optional参数类型

RESTEasy 提供了一种机制来支持一系列 java.util.Optional 类型作为包装器对象类型。这将使用户能够使用optional类型参数,并通过使用 Optional.orElse() 之类的方法代替所有null检查。

下面是一个例子:

@Path("/double")
@GET
public String optDouble(@QueryParam("value") OptionalDouble value) {
    return Double.toString(value.orElse(4242.0));
}

从上面的示例代码我们可以看到 OptionalDouble 可以用作参数类型,当用户没有在@QueryParam 中提供值时,将返回默认值。

下面是支持的Optional参数类型列表:

  • @QueryParam

  • @FormParam

  • @MatrixParam

  • @HeaderParam

  • @CookieParam

如上所示,这些参数类型支持 java 提供的 Optional 类型。请注意,@PathParam 会抛出一个异常,当 Optional 不可用时。原因是 @PathParam 用例的 Optional 只是一个 NO-OP,因为不能省略 path 的元素。

Optional 类型还可以用作 @BeanParam 类的字段的类型。

下面是一个带有 @BeanParam 的示例:

@Path("/double")
@GET
public String optDouble(@BeanParam Bean bean) {
    return Double.toString(bean.value.orElse(4242.0));
}

相应的类 Bean 类:

public class Bean {
    @QueryParam("value")
    OptionalDouble value;
}

最后,Optional 类型可以直接用作 JAX-RS 资源类的字段类型。

下面是一个带有 Optional 类型的 JAX-RS 资源类的例子:

@RequestScoped
public class OptionalResource {
    @QueryParam("value")
    Optional<String> value;
    ...
}