如何使用ObjectMapper将String转换为java8中的列表?

时间:2017-02-22 11:01:13

标签: java jackson objectmapper

我有一个名为primarySkillStr的JSON字符串:

[
  {
    "id": 3,
    "roleIds": [
      2
    ],
    "rating": 2
  }

]

我尝试将其映射到对象,如下所示:

primarySkillList = mapper.readValue(primarySkillStr, 
    new TypeReference<List<PrimarySkillDTO>>() {});

但是,当我将其转换为List时,roleIds列表为null。 我做错了什么,或者还有其他办法吗?

这是我的DTO

public class PrimarySkillDTO {
    private Integer id;
    private Integer rating;
    private List<Integer> roleIds;
    private String name;
}

我在PrimarySkillDTO

中有以下注释
@Data
@Builder
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)

2 个答案:

答案 0 :(得分:4)

问题是你的JsonNaming注释需要snake_case而你没有使用它。

解决问题

  • 删除注释@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
  • 或者,将JSON字符串中的变量重命名为role_ids

答案 1 :(得分:0)

SnakeCaseStrategy将映射roleIds <-> role_ids,以下代码对我有用:

ObjectMapper objectMapper = new ObjectMapper();

TypeReference<List<TestClass>> typeRef = new TypeReference<List<TestClass>>() {};

List<TestClass> testList = objectMapper.readValue(testStringObject, typeRef);
相关问题