如何使用@PathParam的自定义类型?
我想使用非spring bean类对象作为jersey web服务类方法的参数。 但它在构建时给出了缺少的依赖性错误。
我的代码是:
@Component @Path("/abcd") public class ActorServiceEndpoint { @POST @Path("/test/{nonspringBean}") @Produces(MediaType.APPLICATION_XML) public void addActor(@PathParam("nonspringBean") MyNonSpringBeanClass nonspringBean){ } }
东西是路径参数以Stringforms出现。 根据规范,如果我们希望将自定义类型注入为@PathParam
,那么自定义类应该具有以下三种之一:
- 返回类型的公共静态
valueOf(String param)
- 返回类型的公共静态
fromString(String param)
- 或者是接受String的公共构造函数
- 另一个选项是实现
ParamConverter
。 你可以在这里看到一个例子。
如果您不拥有该类(它是您无法更改的第三方类),那么您唯一的选择是使用ParamConverter/ParamConverterProvider
对。
在任何一种情况下,您都需要通过在构造函数中或在上述方法之一中解析String来相应地构造实例。 执行此操作后,可以使用注释将自定义类型设置为方法参数。
其他参数也是如此,例如@FormParam
, @HeaderParam
, @QueryParam
等。
如果您提供了更多关于错误的详细信息,这会有所帮助,但我发现您的代码片段有两个问题:
-
正确的Spring注释是@PathVariable,@ PathParam可能来自另一个包。这不适用,因为我猜您使用的是JAX-RS,而不是Spring注释。 -
我不确定哪些转换器应用于路径变量,但无论如何它都需要有一个用于MyNonSpringBeanClass。 我将获取一个String参数,然后在函数体中自己实例化MyNonSpringBeanClass。