gpt4 book ai didi

java - Jackson @JsonCreator 无法识别的属性

转载 作者:搜寻专家 更新时间:2023-11-01 03:36:02 25 4
gpt4 key购买 nike

我正在尝试使用 Jackson 将一些 JSON 转换为一个类的实例,该类包含一些简单的字符串和另一个我正在使用 @JsonCreator 的类。看来 Jackson 无法创建其他类的实例。

问题是当我将这段代码作为测试的一部分运行时:

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
}

我有一个看起来有点像这样的“玩家”类

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 注释,但我不确定我做错了什么。

最佳答案

您需要在 Player 上指定一个与您的 JSON 输入匹配的创建者。例如:

@JsonCreator
public static Player fromStringValues(@JsonProperty("name") String name,
@JsonProperty("characterClass") String characterClass,
@JsonProperty("difficulty") String difficulty,
@JsonProperty("timesDied") Integer timesDied) {
Player player = new Player();
player.setPlayerName(name);
player.setCharacter(new Character(characterClass, difficulty, timesDied));
return player;
}

旁注,您可以像 this 这样构建您的枚举Jackson 将为您完成从字符串到枚举的转换。

关于java - Jackson @JsonCreator 无法识别的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31325147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com