Java ObjectMapper映射未正确读取列表的数据<;地图>;

Java ObjectMapper映射未正确读取列表的数据<;地图>;,java,spring,spring-boot,spring-mvc,objectmapper,Java,Spring,Spring Boot,Spring Mvc,Objectmapper,我有一个DataResponseDto.json { "data": [ { "customRule": { "code": null, "executionType": "ON_SUCCESS", "description": "Description", "owners": null, "type": "TWO", "enabled": true, "obj

我有一个
DataResponseDto.json

{
  "data": [
    {
      "customRule": {
        "code": null,
        "executionType": "ON_SUCCESS",
        "description": "Description",
        "owners": null,
        "type": "TWO",
        "enabled": true,
        "objectType": "TEST",
        "syncObjectKPIs": null,
        "inactive": false,
        "responsible": null,
        "id": "0AB58A47D3A64B56A6B74DA0E66935DD",
        "embedded": true,
        "value": null,
        "variables": [],
        "kafkaEventName": null,
        "lastChanged": 1530091858490,
        "createPerson": null,
        "externalId": null,
        "groups": null,
        "eventType": "UPDATE",
        "branches": null,
        "executionOrder": null,
        "createDateTime": null,
        "cronExpression": null,
        "udfMetaGroups": null,
        "name": "Sample1",
        "location": null,
        "permissionsType": "USER",
        "udfValues": null,
        "conditions": null,
        "actions": [
          {
            "name": "ChecklistInstance",
            "parameters": {
              "templateName": "checklist"
            }
          }
        ],
        "syncStatus": "IN_CLOUD",
        "executionLog": []
      },
      "customRule": {
        "code": null,
        "executionType": "ON_SUCCESS",
        "description": "Description",
        "owners": null,
        "type": "TWO",
        "enabled": true,
        "objectType": "TEST",
        "syncObjectKPIs": null,
        "inactive": false,
        "responsible": null,
        "id": "5033296D138C45C385AC141E1157B4FE",
        "embedded": true,
        "value": null,
        "variables": [],
        "kafkaEventName": null,
        "lastChanged": 1530091858490,
        "createPerson": null,
        "externalId": null,
        "groups": null,
        "eventType": "UPDATE",
        "branches": null,
        "executionOrder": null,
        "createDateTime": null,
        "cronExpression": null,
        "udfMetaGroups": null,
        "name": "Sample2",
        "location": null,
        "permissionsType": "USER",
        "udfValues": null,
        "conditions": null,
        "actions": [
          {
            "name": "ChecklistInstance",
            "parameters": {
              "templateName": "checklist"
            }
          }
        ],
        "syncStatus": "IN_CLOUD",
        "executionLog": []
      }
    }],
  "pageSize": 1,
  "currentPage": 0,
  "lastPage": 0,
  "totalObjectCount": 1,
  "truncated": false
}
我有一个类来映射这个JSON文件

public class DataResponseDto {
    private List<Map> data;
    private Integer pageSize;
    private Integer currentPage;
    private Integer lastPage;
    private Long totalObjectCount;
    private Boolean truncated;

// getter setter

...
}
公共类数据响应到{
私人名单数据;
私有整数页面大小;
私有整数当前页;
私有整数最后一页;
私人长计数;
私有布尔截断;
//吸气剂设定器
...
}
现在,我使用ObjectMapper将这个JSON解析为一个java类。它仅使用数据中的1个映射检索DataResponseDto。数据中应该有两张地图

ClassLoader ClassLoader=ClassLoader.getSystemClassLoader(); File File=新文件(classLoader.getResource(“mock/DataResponseDto.json”).getFile()

ObjectMapper mapper=new ObjectMapper();
DataResponseDto DataResponseDto=mapper.readValue(文件,DataResponseDto.class);
List rules=dataResponseDto.getData().stream().map(m->mapper.convertValue(m.get(“customRule”),RuleDto.class)).collect(Collectors.toList());

我得到了规则。size()=1,它应该是2

您有重复的键
customRule
。尝试使用规则创建
customRules
数组,然后重新运行代码。

您的问题在于
私有列表数据

MAP不能有重复的键,考虑使用其他的东西,比如从Apache CuMon(<代码> org .Apache .Corn.Stopy.Mava.MulkKeMeP >)来使用代码> MuleKyMyPa<代码> > ./P>哦,我知道,我不能更改数据类型/数据。我们还有其他选择吗?在用正则表达式将字符串解析为JSONObject之前,您可以通过操纵字符串来解决问题。规范说它将只保留最后一个键/值对,并覆盖现有的键对。两个条目都有键“customRule”重要吗?
ObjectMapper mapper = new ObjectMapper();
DataResponseDto dataResponseDto = mapper.readValue(file, DataResponseDto.class);
List<RuleDto> rules = dataResponseDto.getData().stream().map(m -> mapper.convertValue(m.get("customRule"), RuleDto.class)).collect(Collectors.toList());