神奇好望角 The Magical Cape of Good Hope

庸人不必自扰,智者何需千虑?
posts - 26, comments - 50, trackbacks - 0, articles - 11
  BlogJava :: 首页 ::  :: 联系 :: 聚合  :: 管理

前面介绍了各种请求参数的注入,这些参数在 HTTP 请求中都是以纯文本的方式存在的。在处理参数的时候,往往需要把这些文本参数转换为 Java 对象。JAX-RS 提供了一些内置的规则里自动完成这种转换。

转换规则一览

JAX-RS 提供了四条自动类型转换规则,下面我们逐条考察。

原始类型

这个早就见识过了,无需多说。举例回顾一下:

@GET
@Path("{id}")
public Movie getXxx(@PathParam("id") int id) {/*...*/}
    

提供接受单个 String 参数的构造器的类型

这个也不难理解,JAX-RS 会自动调用该构造器创建一个对象:

public class Style {
    public Style(String name) {/* ... */}
    // ...
}

@GET
@Path("{name}")
public Movie getXxx(@PathParam("name") Style style) {
    // JAX-RS 已自动调用 xxx = new Style(name)
    // ...
}
    

提供静态工厂方法 valueOf(String) 的类型

也好理解。特别需要注意的是,所有的枚举类型都在此列,因为编译器会自动给枚举类型加上一个这样的工厂方法。例如:

public enum Style {/*...*/}

@GET
@Path("{name}")
public Movie getXxx(@PathParam("name") Style style) {
    // JAX-RS 已自动调用 style = Style.valueOf(name)
    // ...
}
    

类型参数满足前两个条件的 List<T>Set<T>SortedSet<T>

这条规则适用于多值参数,例如查询参数:

@GET
@Path("xxx")
public Movie getXxx(@QueryParam("style") Set<Style> styles) {
    // JAX-RS 已自动转换每个 Style 对象并组装到 Set 中
    // ...
}
    

转换失败的处理

如果转换失败,JAX-RS 会根据情况自动抛出一个包装了初始异常,但是带不同 HTTP 错误码的 WebApplicationException:对矩阵参数(@MatrixParam)、查询参数 (@QueryParam)或路径参数(@PathParam)来说为 HTTP 404 找不到,而对头部参数(@HeaderParam)或 Cookie 参数(@CookieParam)为 HTTP 400 错误请求


评论

# re: JAX-RS 从傻逼到牛叉 7:注入参数的自动类型转换  回复  更多评论   

2012-01-13 14:00 by danyili
请教一下博主,怎么在jax-rs上加上安全认证?

# re: JAX-RS 从傻逼到牛叉 7:注入参数的自动类型转换  回复  更多评论   

2012-01-13 15:45 by 蜀山兆孨龘
@danyili

JAX-RS 可以和容器管理的安全认证无缝集成,只需要编辑 web.xml 的相关配置,例如 security-constraint,然后在 JAX-RS 类中用 @RolesAllowed 指定允许访问的角色就可以了。HTTPS 也是完全支持的。

建议你先了解下 Java EE 安全方面的功能。

只有注册用户登录后才能发表评论。


网站导航: