【问题标题】:How to pass multiple parameters in controller?如何在控制器中传递多个参数?
【发布时间】:2020-03-04 23:52:13
【问题描述】:

我在将多个参数传递给控制器​​中的 GET 资源时遇到问题。我在我的存储库中创建了一个命名查询。当我调用这个 GET 端点时,它应该通过传递参数来执行命名查询。

下面的代码应该接受多个参数作为输入,例如 ID = 1,2,3,4 等。它只接受一个输入作为参数。

@GetMapping("/message/{Ids}")
    @CrossOrigin(origins = "*")
    public void multidownload(@PathVariable Long[] Ids , HttpServletResponse response)throws Exception {
        List<MessageRepository> messageRepository = Repository.findbyId(Ids);
        String xml = new ObjectMapper().writeValueAsString(messageRepository);
        String fileName = "message.zip";
        String xml_name = "message.xml";
        byte[] data = xml.getBytes();
        byte[] bytes;
        try (ByteOutputStream bout = new ByteOutputStream();
             ZipOutputStream zout = new ZipOutputStream(bout)) {
            zout.setLevel(1);
            ZipEntry ze = new ZipEntry(xml_name);
            ze.setSize(data.length);
            zout.putNextEntry(ze);
            zout.write(data);
            zout.closeEntry();
            bytes = bout.getBytes();
        }
        response.setContentType("application/zip");
        response.setContentLength(bytes.length);
        response.setHeader("Content-Disposition", "attachment; " + String.format("filename=" + fileName));
        ServletOutputStream outputStream = response.getOutputStream();
        FileCopyUtils.copy(bytes, outputStream);
        outputStream.close();
    }

下载的 zip 文件应包含多个 ID 记录,这些记录在调用 GET 端点时作为参数传递。

有人可以查看我的代码并指出需要更改的地方吗?

【问题讨论】:

  • 能否添加调用方法的URL?
  • 这里是 url:localhost:8080/v1/message/1&2 并且我得到以下 http 错误:Whitelabel 错误页面 此应用程序没有 /error 的显式映射,因此您将其视为后备。格林威治标准时间 2019 年 11 月 8 日星期五 10:46:12 出现意外错误(类型=错误请求,状态=400)。无法将“java.lang.String”类型的值转换为所需的“java.lang.Long[]”类型;嵌套异常是 java.lang.NumberFormatException: For input string: "1&2"
  • 请将 GET 命令添加到您用于调用端点的问题中。
  • 你可以查看这个答案:stackoverflow.com/a/22298768/11733759

标签: java rest spring-boot


【解决方案1】:

您可以将其重写为 ID 列表 - `List Ids

@GetMapping("/message/{Ids}")
    @CrossOrigin(origins = "*")
    public void multidownload(@PathVariable List<Long> Ids , HttpServletResponse response)throws Exception {
        ...

【讨论】:

    【解决方案2】:

    您在POST请求方法中实现多个输入参数。

    在请求负载中,请将此整数数组添加到您的请求负载中。

    [1,2,3,4,5]
    

    要在 GET 请求方法中实现相同的功能,请将整数数组转换为字符串。

    示例:

    localhost:8080/user/str=1,2,3
    

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      相关资源
      最近更新 更多