【问题标题】:Serialize Map to Object with alias in object property使用对象属性中的别名将映射序列化为对象
【发布时间】:2017-12-26 19:32:44
【问题描述】:

我正在尝试将 LinkedHashMap 序列化为特定对象。但是我在该对象中的属性具有不同的名称,我怎样才能以正确的方式匹配这些属性? 我尝试使用 @JsonValue 和 @JsonProperty 注释,但我在类上的属性值始终为空。

我有这张地图:

Map<String, String> myMap = new LinkedHashMap<>();
myMap.put("user_name", "John Doe");

我想序列化到这个对象:

@Data
@AllArgsConstructor
@NoArgsConstructor
public static class DummyUser {
    private String userName;
}

我正在尝试使用这种方法:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.convertValue(myMap, DummyUser.class);

【问题讨论】:

    标签: java serialization jackson objectmapper


    【解决方案1】:

    您需要将映射配置应用到您的 POJO,特别是在 userName 的 setter 方法中:

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class DummyUser {
        private String userName;
    
        @JsonProperty("user_name")
        public setUserName(String un) {...}
    }
    
    ObjectMapper mapper = new ObjectMapper();
    
    Map<String, String> myMap = new LinkedHashMap<>();
    myMap.put("user_name", "John Doe");
    
    mapper.readValue(myMap, DummyUser.class);
    

    【讨论】:

    • @JsonProperty 是我的错误。在我的第一个测试中,我使用了导入“com.fasterxml.jackson.annotation.JsonProperty”并且没有工作,现在我将您的解决方案与导入“org.codehaus.jackson.annotate.JsonProperty”一起使用并且它工作了!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多