JBoss.orgCommunity Documentation

第 16 章 @Encoded 和编码

JAX-RS 允许您对 @*Params 进行编码或解码,并使用已编码或解码的字符串指定路径定义和参数名称。

@javax.ws.rs.Encoded 可以在类、方法或参数上使用该注解。默认情况下,对注入的 @PathParam 和@QueryParams 进行解码。通过添加 @Encoded 注释,这些参数的值将以编码形式提供。

@Path("/")
public class MyResource {

    @Path("/{param}")
    @GET
    public String get(@PathParam("param") @Encoded String param) {...}
}

在上面的示例中,注入到 get() 方法参数中的 @PathParam 的值将被 URL 编码。添加 @Encoded 注释作为参数注释触发此影响。

您还可以在整个方法上使用@encoded 注释,并对 @QueryParam 或 @PathParam 的值分别进行编码。

@Path("/")
public class MyResource {
  
    @Path("/{param}")
    @GET
    @Encoded
    public String get(@QueryParam("foo") String foo, @PathParam("param") String param) {}
}

在上面的示例中,将注入"foo"查询参数和"param"路径参数的编码后的值注入。

您还可以为整个类设置编码。

@Path("/")
@Encoded
public class ClassEncoded {
  
    @GET
    public String get(@QueryParam("foo") String foo) {}
}

@Path 注释有一个名为 encode 的属性。控制所提供值的文字部分(那些不属于模板变量的字符)是否为 URL 编码。如果为 true,则将自动对 URI 模板中的任何无效 URI 字符进行编码。如果为 false,则所有字符都必须是有效的 URI 字符。默认情况下,这个值设置为 true。如果您想自己对字符进行编码,可以:

@Path(value="hello%20world", encode=false)

和 @Path.encode()类似 ,它控制在容器尝试在请求中查找查询参数之前是否应该对指定的查询参数名称进行编码。

@QueryParam(value="hello%20world", encode=false)