【问题标题】:Spring Boot PostMapping deserialize Long arraySpring Boot PostMapping 反序列化长数组
【发布时间】:2021-12-21 12:20:04
【问题描述】:

我正在尝试反序列化 Long 值列表:

{
    "ids": [1, 2, 3]
}

使用以下方法:

    @PostMapping(value = "/export")
    public ResponseEntity<SomeDto> exportCsv(@RequestBody Long[] ids) {
        // Some methods
        return ResponseEntity.ok(someDto);
    }

但我不断收到以下错误:JSON parse error: Cannot deserialize value of type Long。错误与使用 List 相同,仅适用于 ArrayList

我已经用@JsonDeserialize(using = NumberDeserializers.LongDeserializer.class) 试过了,但它似乎要么不起作用,要么我用错了。

【问题讨论】:

    标签: java json spring-boot


    【解决方案1】:

    上面的请求体代表一个 POJO 类,其属性为ids,如下所示

    public class Body {
    
      private Long[] ids;
      //getters and setters
    
     }
    

    然后把这个POJO作为RequestBody使用

    public ResponseEntity<SomeDto> exportCsv(@RequestBody Body body)
    

    【讨论】:

      【解决方案2】:

      对于您尝试发送的 json 对象,spring 假设它是一个具有成员字段 ids 的对象。如果您想直接附加到列表,请发送以下 json 作为正文:

      [5, 6, 8]
      

      这适用于:

      @PostMapping(value = "/export")
      public ResponseEntity<SomeDto> exportCsv(@RequestBody Long[] ids) {
      ...
      }
      

      @PostMapping(value = "/export")
      public ResponseEntity<SomeDto> exportCsv(@RequestBody List<Long> ids) {
      ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-01
        • 2019-04-03
        • 2015-09-01
        • 2017-05-24
        • 2018-02-05
        • 1970-01-01
        • 2021-04-10
        • 2016-09-16
        相关资源
        最近更新 更多