Java 选择了错误的rest服务
我有两种方法:Java 选择了错误的rest服务,java,rest,cxf,jax-rs,uritemplate,Java,Rest,Cxf,Jax Rs,Uritemplate,我有两种方法: @GET @Path("/{date}") public Response getPartnerInteractionsByDate( @PathParam("partnerId") int partnerId, @PathParam("date") String date ); @GET @Path("/{interactionId}") public Response getPartnerInteraction( @PathP
@GET
@Path("/{date}")
public Response getPartnerInteractionsByDate(
@PathParam("partnerId") int partnerId,
@PathParam("date") String date
);
@GET
@Path("/{interactionId}")
public Response getPartnerInteraction(
@PathParam("partnerId") int partnerId,
@PathParam("interactionId") int interactionId
);
如何选择一项或另一项服务?如果我将interactionId设为“1”,则仍然会执行带有日期的方法。
我使用的是ApacheCXF3.0.1。谢谢有两个问题。首先,路径必须包含要绑定的PathParams。其次,您的两个路径是相同的,因为它们都采用相同类型的2个参数(cxf无法知道int和包含int的字符串之间的区别) 试着这样做:
@GET
@Path("/{partnerId}/date/{date}")
public Response getPartnerInteractionsByDate(
@PathParam("partnerId") int partnerId,
@PathParam("date") String date
);
@GET
@Path("/{partnerId}/{interactionId})
public Response getPartnerInteraction(
@PathParam("partnerId") int partnerId,
@PathParam("interactionId") int interactionId
);
问题是,模板表达式的路径不明确。在三个主排序键[1]之后,路径仍然不明确。URI不知道类型。一切都是URI(在URI匹配过程中)是一个字符串。模板表达式值稍后将转换为我们的方法参数类型(如果它是可转换类型[2]) 也就是说,消除二者歧义的一种方法是对模板使用正则表达式。比如说
@Path("/{date: \\d{2}-\\d{2}-\\d{4}}")
public Response getPartnerInteractionsByDate
@Path("/{interactionId: \\d{10}}")
public Response getPartnerInteraction
这是假设日期com为MM-DD-YYYY
格式,交互ID为十位数字。这只是一个示例,但说明了如何使其工作
如果绝对没有可以匹配URI的正则表达式模式,那么您需要更改路径(向其中一个添加一部分)以消除歧义
[1]
int
、short
、float
、double
、byte
、char
和boolean
类型都属于这一类别字符串参数的构造函数
valueOf()
的static
方法,该方法接受单个String
参数并返回该类的实例java.util.List
,java.util.Set
,或java.util.SortedSet
,
其中,T
是满足条件2或3的类型,或者是字符串
date
是否有格式?也许你可以使用正则表达式模式而不仅仅是字符串。请更具体一些。您希望将哪些URL路由到哪些方法?为什么每个path参数有两个,但每个只有一个{}模式?@bmargiles您可以在类级别使用模板表达式(我们不想看到:-)。可能{partnerId}
在类级别@Path
@peeskillet是的partnerId在类'@Path'上第一点不是完全有效的,因为{partnerId}
可以包含在类级别@Path
;-)是的,很抱歉从代码中漏掉了这一点,partnerId绑定在类级别@Paththank谢谢,我用“/date/”addition重新设计了路径谢谢我忘记了路径中的模式,很好+1.