【问题标题】:Jackson deserialize List<String> as a property of POJO [duplicate]Jackson 将 List<String> 反序列化为 POJO 的属性 [重复]
【发布时间】:2018-09-15 13:46:45
【问题描述】:

我有一个 POJO 类,它将从 JSON 反序列化,在 Spring 中以 RequestBody 出现。这个 POJO 类包含 List&lt;String&gt; 作为实例变量。当这个变量被反序列化时,值为null。如何正确反序列化它?以下是代码示例 我的 POJO 如下所示

@Getter
@AllArgsConstructor
@NoArgsConstructor
public class BookDto {
@JsonProperty("bookName")
private String bookName;
@JsonProperty("authors")
private List<String> authors;
@JsonProperty("description")
private String description;
}

我的 JSON 对象如下所示

{
 "bookName":"Vagrant Up and Running",
 "authors":["aone", "atwo"],
 "description":"Getting started guide for Vagrant development"
}

下面是示例方法调用

public void method(@RequestBody BookDto bookDto) {}

我遵循了给出的建议,下面给出了反序列化代码

public class AuthorDeserializer extends JsonDeserializer<List<String>> {
@Override
public List<String> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
    Author author = jsonParser.readValueAs(Author.class);
    return author.authors;
}

private static class Author {
    public List<String> authors;
}
}

【问题讨论】:

  • 这不可能是您的真实代码:所有字段都是私有的,无法获取它们的值。发布您的实际代码。
  • 我已经为 getter 和构造函数使用了 lombok 插件
  • 发布您的实际代码。
  • @Madhusudhanan 你是如何反序列化它的?请张贴代码
  • 我无法重现(虽然我没有使用Lombok,但只是生成了它应该根据注释生成的代码)。检查您的输入。确保那里没有错字。尝试编写一个仅反序列化 JSON 的单元测试。

标签: java json spring collections jackson


【解决方案1】:

创建字段 Public 或添加 getter 以使其可反序列化

更多详情请咨询this

【讨论】:

    【解决方案2】:

    如果您使用 Lombok,请考虑添加此注释 @Data,如下所示:

    @Data //You can remove the @Getter and @Setter annotation since @Data includes them
    @NoArgsConstructor
    public class BookDto {
       private String bookName;
       private List<String> authors;
       private String description;
    }
    

    注意:这与问题无关,但为了清楚起见,请删除 @JsonProperty(),此注释在您的情况下是无用的,因为您的 JSON 对象的属性与您的 DTO 的属性具有相同的名称,默认情况下 ObjectMapper 使用映射属性的名称。

    编辑: @RequestBody 为您反序列化 JSON,因此您无需手动操作。

    【讨论】:

      猜你喜欢
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 2012-08-19
      相关资源
      最近更新 更多