如何为@PathParam 使用自定义类型?
How to use Custom type for @PathParam?
我想使用非 spring bean class 对象作为 jersey web 服务 class 方法的参数。但是它在构建时给出了缺少依赖项错误。
我的代码是:
@Component
@Path("/abcd")
public class ActorServiceEndpoint {
@POST
@Path("/test/{nonspringBean}")
@Produces(MediaType.APPLICATION_XML)
public void addActor(@PathParam("nonspringBean") MyNonSpringBeanClass nonspringBean){
}
}
如果您提供有关您遇到的错误的更多详细信息,将会有所帮助,但我发现您的代码片段有两个问题:
正确的 Spring 注释是 @PathVariable,@PathParam 可能来自另一个包。 这不适用,因为我猜你'重新使用 JAX-RS,而不是 Spring 注释。
我不确定将哪些转换器应用于路径变量,但无论如何它都需要为 MyNonSpringBeanClass 使用一个转换器。我会带一个 String 参数,然后在函数体中自己实例化 MyNonSpringBeanClass。
问题是路径参数以字符串形式出现。根据规范,如果我们希望将自定义类型作为 @PathParam
注入,自定义 class 应该具有以下三种情况之一:
- A public静态
valueOf(String param)
即returns类型
- A public static
fromString(String param)
即 returns 类型
- 或者接受字符串
的public构造函数
- 另一个选项实现
ParamConverter
. You can see an example here。
如果您不拥有 class(这是您无法更改的第三方 class),那么您唯一的选择是使用 ParamConverter/ParamConverterProvider
对。
在任何一种情况下,您都需要通过在构造函数或上述方法之一中解析字符串来相应地构造实例。这样做之后,自定义类型可以成为带有注释的方法参数。
其他参数同理,如@FormParam
、@HeaderParam
、@QueryParam
等
我想使用非 spring bean class 对象作为 jersey web 服务 class 方法的参数。但是它在构建时给出了缺少依赖项错误。
我的代码是:
@Component
@Path("/abcd")
public class ActorServiceEndpoint {
@POST
@Path("/test/{nonspringBean}")
@Produces(MediaType.APPLICATION_XML)
public void addActor(@PathParam("nonspringBean") MyNonSpringBeanClass nonspringBean){
}
}
如果您提供有关您遇到的错误的更多详细信息,将会有所帮助,但我发现您的代码片段有两个问题:
正确的 Spring 注释是 @PathVariable,@PathParam 可能来自另一个包。这不适用,因为我猜你'重新使用 JAX-RS,而不是 Spring 注释。我不确定将哪些转换器应用于路径变量,但无论如何它都需要为 MyNonSpringBeanClass 使用一个转换器。我会带一个 String 参数,然后在函数体中自己实例化 MyNonSpringBeanClass。
问题是路径参数以字符串形式出现。根据规范,如果我们希望将自定义类型作为 @PathParam
注入,自定义 class 应该具有以下三种情况之一:
- A public静态
valueOf(String param)
即returns类型 - A public static
fromString(String param)
即 returns 类型 - 或者接受字符串 的public构造函数
- 另一个选项实现
ParamConverter
. You can see an example here。
如果您不拥有 class(这是您无法更改的第三方 class),那么您唯一的选择是使用 ParamConverter/ParamConverterProvider
对。
在任何一种情况下,您都需要通过在构造函数或上述方法之一中解析字符串来相应地构造实例。这样做之后,自定义类型可以成为带有注释的方法参数。
其他参数同理,如@FormParam
、@HeaderParam
、@QueryParam
等