我有Rest WS和pathparam,如
@Path("/myService/{types}")
public Response myFunction(@Context HttpServletRequest request
,@PathParam("types")String[] types)
{
Criteria criteria = session.createCriteria(myObject.class);
criteria.add(Restrictions.in("tranType", types));
List<myObject> lst= (List<myObject>) criteria.list()
}
或者可能有ArrayList或List,其中包含字符串String []
我试图从浏览器调用这个WS。当我在数组中使用1个参数调用它时,它工作正常。 WS调用类似于/myService/type1
。
但是当我想用数组中的2个或更多参数调用它时它不起作用。响应是空数组,但必须返回填充数组。我使用/myService/type1,type2
等许多参数调用WS并且它无效,我也尝试了/myService/{type1,type2}
/myService/[type1,type2]
和/myService/["type1","type2"]
以及/myService/"type1","type2"
但遗憾的是没有任何效果。你能告诉我怎么办?
答案 0 :(得分:3)
正如我在评论中提到的最容易接受路径参数为String
的方法然后根据代码中的,
分隔符将其拆分。
以下是您的修改后的代码,其中显示了上述机制: -
@Path("/myService/{types}")
public Response myFunction(@Context HttpServletRequest request
,@PathParam("types")String type)
{
Criteria criteria = session.createCriteria(myObject.class);
String [] types = type.split(",");
criteria.add(Restrictions.in("tranType", types));
List<myObject> lst= (List<myObject>) criteria.list()
}
如果您有其他问题,请告诉我。
答案 1 :(得分:0)
这种解决方案的问题在于框架不能神奇地转换列表中的字符串(即使以逗号分隔)。您应该只使用String作为参数,然后在方法内手动拆分。
首先,不存在关于列表分隔符的标准。逗号?管道还是分号?什么用作分隔符完全取决于你。
这种解决方案的另一个问题是网址大小可能会增长太多,以至于您的客户可能会遇到使用该资源的问题。
答案 2 :(得分:0)
不要在uri中使用数组,只需将其放在参数字段中,如下所示:
@Path("/myService/types")
public Response myFunction(@Context HttpServletRequest request
,@RequestParam("types[]")String[] types)
{
Criteria criteria = session.createCriteria(myObject.class);
criteria.add(Restrictions.in("tranType", types));
List<myObject> lst= (List<myObject>) criteria.list()
}