有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何为@PathParam使用自定义类型?

我想使用非SpringBean类对象作为jersey web服务类方法的参数。但它在构建时给出了缺少依赖项的错误

我的代码是:

@Component
@Path("/abcd")
public class ActorServiceEndpoint {

    @POST
    @Path("/test/{nonspringBean}")
    @Produces(MediaType.APPLICATION_XML)
    public void addActor(@PathParam("nonspringBean") MyNonSpringBeanClass nonspringBean){
}

}

共 (2) 个答案

  1. # 1 楼答案

    关键是路径参数是字符串形式的。根据规范,如果我们希望将自定义类型作为@PathParam注入,那么自定义类应该具有以下三个特性之一:

    1. 返回类型的公共静态valueOf(String param)
    2. 返回类型的公共静态fromString(String param)
    3. 或者接受字符串的公共构造函数
    4. 另一个选项是实现^{}。你可以看到一个例子here

    如果您不拥有该类(这是一个您无法更改的第三方类),那么您唯一的选择就是使用ParamConverter/ParamConverterProvider

    在这两种情况下,您都希望通过在构造函数中或上述方法之一中解析字符串来相应地构造实例。完成此操作后,可以使用注释将自定义类型设置为方法参数

    其他参数也是如此,比如@FormParam@HeaderParam@QueryParam等等

  2. # 2 楼答案

    如果你能提供更多关于错误的细节,这会有所帮助,但我发现你的代码片段有两个问题:

    • 正确的Spring注释是@PathVariable,@PathParam可能来自另一个包 这不适用,因为我猜您使用的是JAX-RS,而不是Spring注释

    • 我不确定路径变量应用了什么转换器,但无论如何,MyNonSpringBeanClass都需要一个转换器。我将获取一个字符串参数,然后在函数体中实例化MyNonSpringBeanClass