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){
}
}
# 1 楼答案
关键是路径参数是字符串形式的。根据规范,如果我们希望将自定义类型作为
@PathParam
注入,那么自定义类应该具有以下三个特性之一:valueOf(String param)
fromString(String param)
如果您不拥有该类(这是一个您无法更改的第三方类),那么您唯一的选择就是使用
ParamConverter/ParamConverterProvider
对在这两种情况下,您都希望通过在构造函数中或上述方法之一中解析字符串来相应地构造实例。完成此操作后,可以使用注释将自定义类型设置为方法参数
其他参数也是如此,比如
@FormParam
、@HeaderParam
、@QueryParam
等等# 2 楼答案
如果你能提供更多关于错误的细节,这会有所帮助,但我发现你的代码片段有两个问题:
正确的Spring注释是@PathVariable,@PathParam可能来自另一个包这不适用,因为我猜您使用的是JAX-RS,而不是Spring注释我不确定路径变量应用了什么转换器,但无论如何,MyNonSpringBeanClass都需要一个转换器。我将获取一个字符串参数,然后在函数体中实例化MyNonSpringBeanClass