如何在url中为逗号分隔参数传递rest服务的get方法

我有像这样的网络服务

@GET @Produces("application/json") @Path("{parameter1}/july/{param2},{param3},{param4}/month") public Month getResult(@PathParam("parameter1") String parameter1, @PathParam("param2") PathSegment param2 , @PathParam("param3") PathSegment param3, @PathParam("param4") PathSegment param4) { return action.getResult(parameter1, new Integer(param2.getPath()), new Integer(param3.getPath()), new Integer(param3.getPath())); } 

如果我从我的测试类中调用此Web服务,它可以正常工作; 但如果我通过浏览器调用它,我会收到消息,因为无法找到该服务。

我通过浏览器使用的url是

HTTP://本地主机:8080 / Web应用程序/服务/座椅/ mylogin /月/ 1,0,0 /月

如果我使用url作为

HTTP://本地主机:8080 / Web应用程序/服务/座椅/ mylogin /飞/ 1/0/0 /月

并相应地更改服务中的路径它工作正常,但要求是使用逗号而不是斜杠。 我们有什么办法可以在url中使用带逗号分隔参数的web服务吗?

对我来说,用逗号分隔多个参数没有问题,即使它们是路径的一部分而不是查询参数。 我测试了它,它确实有效。

实际上,如果您不需要检查这些参数的正确性,您甚至可以直接绑定到int 。 我确实使用@PathVariable进行这些绑定。

 @GET @Produces("application/json") @Path("{parameter1}/july/{param2},{param3},{param4}/month") public Month getResult(@PathVariable("parameter1") String parameter1, @PathVariable("param2") int param2 , @PathVariable("param3") int param3, @PathVariable("param4") int param4) { return action.getResult(parameter1, param2, param3,param3); } 

编辑:

至于我测试的代码,它是:

 @Controller public class InfoController { @RequestMapping(method = RequestMethod.GET, value = "/seating/{param1},{param2},{param3}/month") public String showMonthView(Model uiModel, @PathVariable("param1") int p1, @PathVariable("param2") int p2, @PathVariable("param3") int p3, HttpServletRequest httpServletRequest) { LOG.debug(String.format("view:/seating/%d,%d,%d/month", p1, p2, p3)); uiModel.addAttribute("param1", p1); uiModel.addAttribute("param2", p2); uiModel.addAttribute("param3", p3); return "month"; } @ResponseBody @RequestMapping(method = RequestMethod.GET, value = "/seating/{param1},{param2},{param3}/month", produces="application/json") public Map showMonthJson(@PathVariable("param1") final int p1, @PathVariable("param2") final int p2, @PathVariable("param3") final int p3) { LOG.debug(String.format("json:/seating/%d,%d,%d/month", p1, p2, p3)); Map result = new HashMap() {{ put("param1", p1); put("param2", p2); put("param3", p3); }}; return result; } } 

使用位于/seating/month.jsp的正确视图作为第一种方法。

或者,返回由3个参数组成的实体并生成json或xml也没有问题。

在您的示例中,您使用PathSegment表示整个路径段,在您的情况下为“1,0,0”,因此无法解析为整数。

如果您使用int而不是PathSegment ,则将按预期提取值,并且方法体将更加简洁。

以下代码对我来说很好:

 @GET @Path("{parameter1}/july/{param2},{param3},{param4}/month") public String commaSeparatedValueDemo(@PathParam("parameter1") String parameter1, @PathParam("param2") int param2, @PathParam("param3") int param3, @PathParam("param4") int param4) { return MessageFormat.format("{0}: {1}, {2}, {3}", parameter1, param2, param3, param4); } 

回应

… /一些资源/参数1/7 / 1,2,3 /月

参数1:1,2,3

URL参数不以逗号分隔,它们是“&” – 分隔。 所以你要做的就是’&’ – 将它们分开。