【发布时间】:2015-09-28 06:44:18
【问题描述】:
我正在尝试使用 Jackson 将一些 JSON 转换为一个类的实例,该类包含一些简单的字符串和另一个类,我正在使用 @JsonCreator。杰克逊似乎无法创建其他类的实例。
问题在于,当我将此代码作为测试的一部分运行时:
ObjectMapper mapper = new ObjectMapper();
Player player = mapper.readValue(json.toString(), Player.class);
我得到以下异常:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "characterClass" (class xxx.xxx.Player), not marked as ignorable (2 known properties: "name", "character"])
我在简单测试中尝试解析的 JSON 如下所示:
{
"name": "joe",
"characterClass": "warrior",
"difficulty": "easy",
"timesDied": 2
}
我有一个看起来有点像这样的类 'Player'
public class Player {
@JsonProperty("name")
private String playerName;
@JsonProperty // <-- This is probably wrong
private Character character;
// Some getters and setters for those two fields and more
}
还有一个看起来像这样的“字符”类
public class Character{
private PlayerClass playerClass;
private Difficulty difficulty;
private int timesDied;
@JsonCreator
public Character(@JsonProperty("characterClass") String playerClass,
@JsonProperty("difficulty") String diff,
@JsonProperty("timesDied") int died) {
// Validation and conversion to enums
this.playerClass = PlayerClass.WARRIOR;
this.difficulty = Difficulty.EASY;
this.timesDied = died;
}
// Again, lots of getters, setters, and other stuff
}
对于像这样的小数据集,有更好的方法来构建整个数据,但我认为这只是为了举例。我的真实代码更复杂,但我想做一个简单的例子。
我认为我搞砸了 Jackson 注释,但我不确定我做错了什么。
【问题讨论】: