我正在使用Jackson 2库,并且尝试读取JSON响应,如下所示:
{ "value":"Hello" }
当value为空时,JSON响应如下所示:
{ "value":{} }
我的模型POJO类看起来像这样
public class Hello {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
问题是当响应看起来像{value:{}}时,Jackson试图读取一个Object,但是我的模型类字段是一个字符串,因此它引发了Exception:
JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token.
我的问题是Jackson如何成功读取如下所示的JSON:
{"value":"something"}
并且如果响应看起来像这样的{“ value”:{}}(对我来说是空响应),则将null传递给我的Hello模型类的value字段。
我正在使用以下代码来读取JSON字符串:
String myJsonAsString = "{...}";
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(myJsonAsString , Hello.class);
java大神给出的解决方案
您可以为此字段使用自定义解串器。这是一个返回字符串(如果存在)的字符串,在任何其他情况下均返回null:
public class Hello {
@JsonDeserialize(using = StupidValueDeserializer.class)
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
public class StupidValueDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonToken jsonToken = p.getCurrentToken();
if (jsonToken == JsonToken.VALUE_STRING) {
return p.getValueAsString();
}
return null;
}
}
java:继承 - java有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…
如何在Java中以语言环境正确的顺序格式化日期和月份? - java有没有一种方法可以用Java / Kotlin中的区域设置正确的格式格式化日和月(以紧凑格式)而不格式化年份?因此,对于英语,应为“ 9月20日”,而对于瑞典语为“ 9月20日”。为了进行比较,在Cocoa平台上,我可以执行以下操作(在Swift中):let formatter = DateFormatter() formatter.locale = Loc…
如何修改休眠的SQL查询? - java我有点好奇,有没有办法修改hibernate的核心,以便我可以自定义生成的SQL query。例如,在生成的查询中添加功能以使用connect by prior(oracle)或我要自定义的任何其他子句。 java大神给出的解决方案 起初,这样的问题总是在我心中敲响警钟。你被警告了...AFAIK,hibernate使用所谓的dialects进行特定的优化。…
如何将Jackson的TypeReference与泛型一起使用? - java对于json映射,我使用以下方法:public static <T> T mapJsonToObject(String json, T dtoClass) throws Exception { ObjectMapper mapper = new ObjectMapper(); return mapper.readValue(json, new T…
用Java构建大批量数据处理工具 - javaClosed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。 3年前关闭。 Improve this question 我正在尝试使用Java构建ETL工具。 ETL工具用于对大量数据(关系型和其他类型)进行批量读取,…