【问题标题】:Spring Boot REST to read JSON array payloadSpring Boot REST 读取 JSON 数组有效负载
【发布时间】:2020-03-24 02:57:55
【问题描述】:

我有这个 PostMapping 方法

@PostMapping("/offreStage/{id}/users")
public ResponseEntity<?> addAuthorizedStudents(@PathVariable Long id,
                                               @RequestBody Map<String, String> students) {
    return service.addAuthorizedStudentsToOffer(id, students);
}

我使用以下 JSON 有效负载来发出我的发布请求:

[
    {
        "value": 15,
        "label": "student2@gmail.com"
    },
    {
        "value": 14,
        "label": "student21@gmail.com"
    }
]

这将返回以下内容:

"message": "JSON 解析错误:无法反序列化 java.util.LinkedHashMap 出 START_ARRAY 令牌;嵌套异常 是 com.fasterxml.jackson.databind.exc.MismatchedInputException: 不能 从 START_ARRAY 中反序列化 java.util.LinkedHashMap 的实例 令牌\n 在 [Source: (PushbackInputStream);行:1,列:1]",

【问题讨论】:

    标签: java rest spring-boot


    【解决方案1】:

    由于您发送 JSON 的方式,它不起作用。在您的示例中,您实际上是在发送一个地图数组作为 Json,并期望 Spring 将其转换为地图。在您的 JS 中将结构转换为单个映射,或者您可以在后端使用对象来相应地映射 json 中的数据,例如:

    [
        {
            "value": 15,
            "label": "student2@gmail.com"
        },
        {
            "value": 14,
            "label": "student21@gmail.com"
        }
    ]
    

    然后你可以像这样使用你的控制器:

    @PostMapping("/offreStage/{id}/users")
    public ResponseEntity<?> addAuthorizedStudents(@PathVariable Long id,
                                                   @RequestBody List<ObjectClass> students) {
        return service.addAuthorizedStudentsToOffer(id, students);
    }
    

    你的对象类可能是这样的:

    public class ObjectClass {
    String value;
    String label;
    //getters and setters
    
    }
    

    【讨论】:

      【解决方案2】:

      发送的正文与函数中的不匹配。

      更准确地说,这是你的地图:

        {
              "value": 15,
              "label": "student2@gmail.com"
        }
      

      您需要一个地图列表,所以它不起作用。所以应该是这样的:函数中的List&lt;Map&lt;String, String&gt;&gt;。 或者更好的是,使用集合 (see this post)。

      【讨论】:

        【解决方案3】:

        Map 用于键值对,您有键值对列表。

        Map&lt;String, String&gt; 更改为List&lt;Map&lt;String, String&gt;&gt;

        【讨论】:

          猜你喜欢
          • 2018-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-17
          相关资源
          最近更新 更多