我正在尝试使用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
}
对于像这样的小数据集,会有更好的方法来构建整个事情,但我认为这对于示例来说是有效的。我拥有的真实代码更复杂,但我想做一个简单的例子。
我想我弄乱了杰克逊的注释,但我不确定我做错了什么。
您需要在< code>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;
}
顺便说一下,你可以像这样构造你的枚举,Jackson会帮你完成从字符串到枚举的转换。
我有一个类似的枚举: json文件本身有private字段,所以我需要private(它是java键盘)来进行序列化和映射,但是如果我使用private和所有小写,这将是一个运行时错误。我使用了上面代码中的@JSONProperty,但仍然不起作用。 进程已完成,退出代码为0
我有一个带有javamail的spring启动应用程序,我配置了spring。属性,但似乎不需要属性来发送电子邮件。 下面是发送电子邮件的java代码 pom.xml 这里我们看到了这个错误 组织。springframework。邮政MailSendException:邮件服务器连接失败;嵌套的异常是com。太阳邮政util。MailConnectException:无法连接到主机,端口:loca
问题内容: 在我的实体类中,我试图创建一个只写字段(在序列化期间会被忽略,但通常会反序列化)。 这 几乎 给了我想要的东西:JSON包含“ password”字段,但该值始终为null。如何完全删除该字段? 问题答案: 使用上只是 吸气 ,而不是使用。然后也用在 二传手 。 这应该允许反序列化,但是序列化的JSON输出将不包含它。 例如,将以其他方式表示要序列化的属性(例如“ getValue”以
我在Scala中使用Jackson作为映射器定义了以下类。 插入mongoDB工作没有问题,一个会自动为每个文档插入。 但现在我想尝试读取(或反序列化)文档,例如通过调用。这总是会导致_id出现我使用和。即使有自己的ObjectId,这也不起作用,因为和被视为不同的对象。 有人能帮助我们如何获取实例或如何正确地反序列化吗?提前谢谢
问题内容: Java SE 6项目是否支持eclipselink jpa2的标准api?如果没有,那是我的问题。我是否需要在persistence.xml中为条件api指定特殊的内容? 这是我的条件查询: 这是我的意思实体: 问题答案: 关于您的代码 我没有检查条件查询本身的正确性,但是,正如克里斯所提到的,您正在将静态元模型类与不会暴露您所要查找的混合在一起。假设已经生成了元模型类,请删除第一行
我必须在其他类中使用的所有set和get方法,所以我不能删除一个方法。当我召唤 它提示异常,jackon不知道设置了哪个方法,所以我使用了@jsonignore,但我发现receive是null。