jackson 将Map转换为POJO,同时保留Java中的原始类型

t40tm48m  于 2023-04-30  发布在  Java
关注(0)|答案(1)|浏览(120)

我需要将Map〈String,Object〉转换为POJO并保持Map的所有原始类型。
以这个简单的POJO为例:

@Data
@JsonInclude(Include.NON_NULL)
public class mObj{
    private String id;
    private Object value;
}

我需要的值是相同的类型存储在Map〈字符串,对象〉。如果我的map是:

Map<String, Object> data = Map.of("id", "123",  "value", OffsetDateTime.now(ZoneId.of("Z")));

然后我期望在转换为myObj之后,Object值的类是OffsetDateTime。
我尝试使用Jackson进行转换,尽管它似乎保留了大多数类型,但对于java等时间戳类,它并不能很好地工作。time.OffsetDateTime.相反,它将其转换为String。
对于这种情况,我如何保持Map中的原始类型?

ndh0cuux

ndh0cuux1#

使用从Lombok获得的setter似乎可以很好地工作:

var mObjList = data.entrySet().stream()
        .map(entry -> {
            mObj myMObj = new mObj();
            myMObj.setId(entry.getKey());
            myMObj.setValue(entry.getValue());
            return myMObj;
        }).toList();

否则,我建议在你的类中添加一个@AllArgsConstructor来实现这种简化:

var mObjList = data.entrySet().stream()
        .map(entry -> new mObj(entry.getKey(), entry.getValue()))
        .toList();

相关问题