gpt4 book ai didi

java - Jackson 反/序列化 Key 问题

转载 作者:行者123 更新时间:2023-12-01 09:46:55 26 4
gpt4 key购买 nike

我需要反/序列化 Entity到其EntityDTO 。麻烦的是Entity类有一个 collection<KeyValue>其中:

class KeyValueDTO {
private String key;
private Object value;
}

Entity Collection 了KeyValue :

class KeyValue {
private String key;
private Object[] values;
}

因此,每种情况下数据的存储方式略有不同。所以,

KeyValueDTO dto1 = new KeyValueDTO("k1", "v1");
KeyValueDTO dto2 = new KeyValueDTO("k1", "v2");
KeyValueDTO dto3 = new KeyValueDTO("k1", "v3");

并使用 KeyValue类:

KeyValue values = new KeyValue("k1", new Object[] { "v1", "v2", "v3"});

然后,Entity类是

class Entity {
List<KeyValue> values;
}

并且,

class EntityDTO {
List<KeyValueDTO> values;
}

我需要映射一个 json,例如:

[ {"k1": "v1"}, {"k1": "v2"}, {"k1": "v3"} ]

发送至 List<KeyValue> 。所以,values属性必须有一个元素 KeyValue::key => "k1"KeyValue::values => {"v1", "v2", "v3"} .

我使用 jackson 来解/序列化每个 REST 方法参数。所以,我需要从Entity映射至EntityDTO和来自 EntityDTOEntity .

有什么想法吗?

最佳答案

Jackson 不会处理这样的转换,因此您需要自己进行转换。

您要求进行两次转换:

  1. 实体 -> EntityDTO
  2. EntityDTO -> 实体

这些并不是简单的转变,但也不算太糟糕。具有新 Streams API 的 Java 8 非常适合这些类型的转换。

给你:

    Entity entityToTransform = new Entity();
EntityDTO entityDtoToTransform = new EntityDTO();

// Entity -> EntityDTO
// transform the list of KeyValues to KeyValueDTOs
List<KeyValueDTO> keyValueDtos = entityToTransform.getValues().stream(
).flatMap(
keyValue -> Arrays.stream(
keyValue.getValues()
).map(
value -> new KeyValueDTO(keyValue.getKey(), value)
)
).collect(Collectors.toList());
// set the object
EntityDTO entityDto = new EntityDTO(keyValueDtos);


// EntityDTO -> Entity
// transforms the list of KeyValueDTOs to KeyValues
List<KeyValue> keyValues = entityDtoToTransform.getValues().stream(
).collect(
Collectors.collectingAndThen(
Collectors.groupingBy(keyValueDto -> keyValueDto.getKey()),
groupings -> groupings.entrySet().stream(
).map(
entry -> new KeyValue(
entry.getKey(),
entry.getValue().stream(
).map(
keyValueDto -> keyValueDto.getValue()
).collect(
Collectors.toList()
).toArray(
new Object[entry.getValue().size()]
)
)
).collect(Collectors.toList())
)
);

Entity entity = new Entity(keyValues);

关于java - Jackson 反/序列化 Key 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37923939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com