我正在使用Jackson JSON库将一些JSON对象转换为POJO类。问题是,当我使用具有重复属性的JSON对象时,例如:
{
"name":"xiaopang",
"email":"xiaopang1@123.com",
"email":"xiaopang2@123.com"
}
杰克逊报告最后一封电子邮件对"email":"xiaopang2@123.com"
,然后解析该对象。
我从JSON语法中获悉了对象中的重复键吗?反序列化具有重复属性的JSON对象时发生的情况取决于库的实现,是抛出错误还是将最后一个用于重复键。
尽管跟踪所有属性会产生开销,但是在这种情况下,是否有任何方法可以告诉Jackson报错或异常,例如“ Duplicate key”?
用 JsonParser.Feature.STRICT_DUPLICATE_DETECTION
ObjectMapper mapper = new ObjectMapper();
mapper.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION);
MyPOJO result = mapper.readValue(json, MyPOJO.class);
结果是:
Exception in thread "main" com.fasterxml.jackson.core.JsonParseException: Duplicate field 'email'
您也可以尝试使用DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY
(更多信息)如果先将json字符串/输入反序列化为jackson
json树,然后反序列化为POJO,则会触发该问题。可以将其与自定义结合起来,JsonDeserializer
如下所示:
private static class MyPojoDeserializer extends JsonDeserializer<MyPOJO>{
@Override
public MyPOJO deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException{
JsonNode tree = p.readValueAsTree();
return p.getCodec().treeToValue(tree, MyPOJO.class);
}
}
设置一次,并使用与以前相同的方式:
// setup ObjectMapper
ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY);
SimpleModule module = new SimpleModule();
module.addDeserializer(MyPOJO.class,new MyPojoDeserializer() );
mapper.registerModule(module);
// use
mapper.readValue(json, MyPOJO.class);
结果:
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Duplicate field 'email' for ObjectNode: not allowed when FAIL_ON_READING_DUP_TREE_KEY enabled
其他选择是自己在自定义反序列化器中或在POJO setter方法中实现所有逻辑。
问题内容: 我正在尝试使用Jackson JSON接受一个字符串,并确定它是否为有效JSON。谁能建议要使用的代码示例(Java)? 问题答案: 不知道您的用例是什么,但是应该这样做:
我正在制作一个基于文本的冒险游戏,我需要进行一些用户输入验证 我已经为这个特定实例设置了循环,但在输入正确的输入后,我似乎无法使循环中断。 代码: 我的输出是这样的: 你的选择是敲打还是猛击。别那么粗鲁。 大满贯 你猛地撞上沉重的橡木门,沉重的铁铰链砰的一声让位了。当你凝视城堡的第一个房间时,灰尘落在你的头上。大厅大约有五十英尺长。西墙有三扇门,东墙有两扇门。空气中弥漫着霉菌、湿气和铁的味道。曾经
假设我有以下课程: 是否可以通过“MyProduct”类验证“code”属性?比如:
我想验证具有字符串属性和字符串值的元素: 我使用了: 它说内容无效。 文档中说,具有属性的元素总是“complexType”。如果省略xs:restriction行,则内容必须为空。但我想要一个字符串值(“eric”)。 XSD代码应该是什么? 附言:我想避免丑陋的“mixed=“true”
如果我上传了.xls或任何其他文件,那么它将显示一个错误。
晚上好,我正在尝试在下面的场景中使用Hibernate验证器: