【问题标题】:How to pass generic List<User> to restful web services如何将通用 List<User> 传递给宁静的 Web 服务
【发布时间】:2015-04-03 18:16:31
【问题描述】:

我需要使用 RESTful Web 服务创建搜索操作,即使用 @GET。方法签名将 String 和 List 作为输入参数并返回 List。

public Generic List <Employer> getAllEmployer(String employeeName, Generic List <employeeLocation>);

如果有人可以描述如何实现相同的功能,请询问。我应该使用查询参数或路径参数还是表单参数。我需要以 json 格式返回雇主列表。

【问题讨论】:

    标签: java json rest jax-rs


    【解决方案1】:

    如果员工位置只是字符串,则将它们作为逗号分隔值传递,spring 将负责将其转换为列表。我宁愿建议将其作为路径参数,而不是将其作为查询参数。

    【讨论】:

    • 您好,员工位置类包含更多元数据(部门、薪水、职位、职务),这也是创建搜索操作和增加查询响应时间所必需的。所以员工位置需要作为 List 传递
    【解决方案2】:

    这只是我的看法,但我认为传递多个同名参数的“RESTful”方式是传递给 MultiValueMap。

    Spring 和 Jersey 都有 MultiValueMap 的实现,但是,下面是一个 spring 实现的例子:

    @RequestMapping(method = RequestMethod.GET, value = {"/employer/_search"})
    public List<Employer> search(@RequestParam MultiValueMap<String,String> params) {
        return someService.search(params);
    }
    

    您调用此 url 的方式将变为:

    /employer/_search?employeeName=name&location=1&location=2&location=3
    

    然后spring会在幕后为你创建一个MultiValueMap,它是一个Map&lt;String,List&lt;String&gt;&gt;,其中任何同名的参数都放在同一个列表中。

    【讨论】:

    • 嗨,埃里克,感谢您的建议。但是我没有在项目中使用 spring 框架。它的纯 Web 服务应用程序专门用于通过 jersey 实现的 Java REST Web 服务。如果你能告诉我如何在没有spring框架的情况下实现相同的代码sn-p。
    • 我相信 jersey 也有 MultivaluedMap 的实现我不确定确切的实现,因为我以前从未使用过 jersey。
    • 如果 MultiValueMap 对我有用,那么我会很好,否则需要研究。非常感谢 Eric 的建议。干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2011-06-03
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    相关资源
    最近更新 更多