球衣 - 在资源的 URI 中使用自定义 class

jersey - use custom class in URI of resource

我有一个自定义数据class:

public static class Data {
    ...
}

我想在泽西岛资源的 URI 中使用这个 class。例如:

@Path("test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class ResourceTest {
    @GET
    @Path("/data-{data}")
    public Response get(@PathParam("data") final Data data) {
        ...
    }
}

这可能吗?我想我需要注入某种转换器,将 Data 的文本表示转换为 Data 实例。我一直在查看文档,但到目前为止还没有找到有用的东西。

当然可以改成:

@Path("test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class ResourceTest {
    @GET
    @Path("/data-{data}")
    public Response get(@PathParam("data") final String input) {
        final Data data = convert(input);
        ...
    }
}

但我宁愿进行转换 elsewhere/automagically wrt。资源。

来自docs

注释参数、字段或 属性 的类型必须是:

  • ...
  • 有一个接受单个字符串参数的构造函数。
  • 有一个名为 valueOf 或 fromString 的静态方法,它接受单个字符串参数(例如,参见 Integer.valueOf(String))。
  • 拥有 ParamConverterProvider JAX-RS 扩展 SPI 的注册实现,returns 一个 ParamConverter 实例能够 "from string" 类型转换。

所以如果你提供一个构造函数Data(String)你应该没问题。