【问题标题】:how to pass list(array) parameter to Rest Ws from browser如何将列表(数组)参数从浏览器传递给 Rest Ws
【发布时间】:2017-05-03 08:10:10
【问题描述】:

我有带路径参数的 Rest WS

@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",但不幸的是没有任何效果。你能告诉我我该怎么做吗?

【问题讨论】:

标签: java rest


【解决方案1】:

正如我在评论中提到的,接受路径参数为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()
    }

如果您还有其他问题,请告诉我。

【讨论】:

    【解决方案2】:

    不要在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()
    }
    

    【讨论】:

      【解决方案3】:

      这种解决方案的问题是框架不能神奇地转换列表中的字符串(即使是逗号分隔)。您应该只使用一个字符串作为参数,然后在方法内手动拆分。

      首先不存在关于列表分隔符的标准。逗号?管道还是分号?用作分隔符的用途完全取决于您。

      这种解决方案的另一个问题是 url 的大小可能会增长太多,以至于您的客户可能会在消耗资源时遇到问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多