问题描述
现在我使用 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;
}
这是现在的调试视图:
我该怎么做才能修复它?
解决方法
查看 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?
或者,您可以更改序列化数据中的属性名称以匹配实例变量名称。