ObjectMapper 无法在 Java 11 中将映射转换为 POJO

问题描述

现在我使用 ObjectMapper 将 Map 转换为 Java 中的 POJO,这是我的代码

@Override
    public RSSSubSourceExtDTO getChannelAnalysisInfo() {
        Map<String,Object> analysisInfo = customRSSSubSourceMapper.getSourceInfo(new SubSourceRequest());
        final ObjectMapper mapper = new ObjectMapper();
        final RSSSubSourceExtDTO pojo = mapper.convertValue(analysisInfo,RSSSubSourceExtDTO.class);
        return pojo;
    }

但结果POJO所有属性都为空。我试图调整 POJO 属性名称,并将 POJO 属性调整为对象类型,但仍然无法将值从映射转换为 POJO。这是我的 POJO 定义:

import java.io.Serializable;

/**
 * @author dolphin
 */
@JsonIgnoreProperties(ignoreUnkNown = true)
@Data
public class RSSSubSourceExtDTO implements Serializable {
    /**
     * support increment pull channel count
     * RSS_sub_source.id
     *
     * @mbggenerated
     */
    private Object incrementPullChannelCount;

    /**
     * do not support increment pull channel count
     * RSS_sub_source.created_time
     *
     * @mbggenerated
     */
    private Long fullPullChannelCount;

    /**
     * 
     * RSS_sub_source.editor_pick
     *
     * @mbggenerated
     */
    @ApiModelProperty(value = ")")
    private Long editorPickChannelCount;
}

这是现在的调试视图:

enter image description here

我该怎么做才能修复它?

解决方法

查看 analysisInfo 映射,字段名称与 POJO 中的实例变量名称不匹配。例如,字段名称是 fullPullChannelCount 而您的地图是 fullpullchannelcount

使用 @JsonProperty 将映射中的属性名称映射到 POJO 中的变量。

@JsonProperty("fullpullchannelcount")
private Long fullPullChannelCount;

@JsonProperty("editor_pick_channel_count")
private Long editorPickChannelCount;
....

见:When is the @JsonProperty property used and what is it used for?

或者,您可以更改序列化数据中的属性名称以匹配实例变量名称。