如何发送长列表以与休息控制器一起使用

Posted

技术标签:

【中文标题】如何发送长列表以与休息控制器一起使用【英文标题】:how to send a list of long to work with a rest controller 【发布时间】:2020-08-08 03:51:17 【问题描述】:

我正在开发一个 api。我想发送Long 的列表以通过 id 查找项目。 这是休息控制器:


@PostMapping("person/id/projects/")
    @JsonFormat (with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
    public Person addProject(@PathVariable Long id, @RequestBody List<Long> project_id)
        Optional<Person> person = personRepo.findById(id);
        Person person1 = person.get();
        for(int i=0; i<project_id.size(); i++)
            System.out.println(project_id.get(i));
            Optional <Project> project = projectRepo.findById(project_id.get(i));
            person1.getProjectList().add(project.get());

        
        System.out.println((person1.getProjectList()).toString());

        return personRepo.save(person1);
    

这是我发送给休息控制器的请求


    "project_id": [1,2,3]

我得到了这个异常:

JSON parse error: Cannot deserialize instance of `java.util.ArrayList<java.lang.Long>` out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList<java.lang.Long>` out of START_OBJECT token\n at [Source: (PushbackInputStream); line: 1, column: 1]

我已经尝试了与 id 的 PathVariable 相同的代码,它有效。但是这个剂量

【问题讨论】:

【参考方案1】:

你实际上在这里发送一个 json 对象而不是一个列表

改为在您的发布请求中发送。

 [1,2,3]

如果您有类似的情况,您之前的请求可能会起作用

public class X 
  @JsonFormat (with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
  private List<Long> project_id;
 

@PostMapping("person/id/projects/")
public Person addProject(@PathVariable Long id, @RequestBody X x)..

【讨论】:

以上是关于如何发送长列表以与休息控制器一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中为枚举值添加描述以与 ASP.NET MVC 中的下拉列表一起使用? [复制]

服务器发送事件 Spring Webflux 返回事件名称以响应来自休息控制器的响应

如何连接多个音频输出通道以与 PyAudio 一起使用?

Flutter 如何在 Firestore 中组合多个文档中的值以与列表中的相应卖家一起显示

以反应方式一次发送一个对象列表

如何在目标 c 中模拟类方法以与 TDD 一起使用