当前位置: 首页 > 知识库问答 >
问题:

如何将列表(数组)参数从浏览器传递给Rest Ws

陈瀚玥
2023-03-14

我有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()
}

或者可能有数组列表或位置字符串为[]的列表

我正在尝试从浏览器调用此 WS。当我在数组中使用 1 个参数调用它时,它工作正常。WS 调用类似于 /myService/type1。但是当我想在数组中使用 2 个或更多参数调用它时,它不起作用。响应为空数组,但它必须返回填充数组。我用许多参数调用 WS,例如 /myService/type1,type2 并且它不起作用,我也尝试了 /myService/{type1,type2} 和 /myService/[type1,type2] 和 /myService/[“type1”,“type2”] 和 /myService/“type1”,“type2”,但不幸的是没有任何效果。 你能告诉我我该怎么做吗?

共有3个答案

乐正焕
2023-03-14

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

首先不存在一个关于列表分隔符的标准。逗号?烟斗还是分号?用什么作为分隔符完全由你决定。

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

尹雅健
2023-03-14

不要在 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()
}
吴英武
2023-03-14

正如我在注释中提到的,最简单的方法是将路径参数接受为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()
    }

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

 类似资料:
  • 问题内容: 我正在A中使用RUN指令安装rpm 但是,我想将值“ 2.3”作为参数传递。我的RUN指令应类似于: 哪里 问题答案: 您正在寻找和指导。这些是Docker 1.9中的新功能。查看https://docs.docker.com/engine/reference/builder/#arg。这将允许您添加到,然后使用构建。

  • 问题内容: 我想在我的课程中传递默认参数,但是不知何故我遇到了问题: 如果现在尝试实例化,则会出现以下错误: 我究竟做错了什么? 问题答案: 从该文档: 要使用的参数是: default_factory: 如果提供, 则必须为零参数可调用对象 ,当此字段需要默认值时将被调用。除其他用途外,这可用于指定具有可变默认值的字段,如下所述。同时指定default和default_factory是错误的。

  • 问题内容: 我正在创建一种通过传递搜索字段从任何表中选择ID的方法。 但是我得到一个有关语法错误的MySqlException。当我查看“异常”消息时,它向我显示带引号的查询表!如何将表格作为不带引号的参数传递? 问题答案: 大多数数据库不允许您通过参数指定表名或列名。参数用于 值 。如果确实确实需要使它动态化,则应验证输入(它应该是一个已知的表名,并且该表中具有已知的列名),然后将其包括在SQL

  • 问题内容: 我需要在Web服务调用中将一些值从移动设备传递到服务器,因此我打算将JSON格式的所有值传递如下 以下是我的服务电话 我正在尝试通过这种方式致电上述服务 但是输出是这样的 谁能告诉我为什么我没有获得所有的价值观? 问题答案: 我建议将JSON数据作为请求传递给主体。但是,如果您仍然希望将其作为URL中的参数传递,则必须像下面这样对URL进行编码,例如: 对于前json是:-> 有关UR

  • 如何在JSP中分别显示id、txtfile和语句?如何将arraylist从servlet传递到JSP。 JSP:如何编辑我的JSP。我的JSP出现错误: 类型安全:未经检查的objectto arraylist强制转换

  • 我正试图将dataframe列作为参数传递 但是得到错误 :33:错误:类型不匹配; 找到:org.apache.spark.sql.column 必需:int val df_new=df.withcolumn(“age_category”,ageclassification.agecategory(df(“age”))