如何将list(array)参数从浏览器传递给Rest Ws

时间:2017-05-03 08:10:11

标签: java rest

我有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"但遗憾的是没有任何效果。你能告诉我怎么办?

3 个答案:

答案 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()
}