public class Forward implements Serializable {
private List<String> freq;
public List<String> getFreq() {
System.out.println("Print Freq::: --> " + freq);
return freq;
}
public void setFreq(List<String> freq) {
this.freq = freq;
}
}
{"forward":[{"freq":"78000000"}]}
我的映射器是:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
String jsonString = mapper.writeValueAsString(result);
如果我删除列表freq并改为字符串freq,它可以工作,但我的JSON可以包含一个或多个freq,所以我需要创建一个列表。我得到的异常如下:
Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream
deserializationfeature.accept_single_value_as_array
可以很好地将“freq”:“78000000”
片段反序列化为列表
列表的值。
但是还有另一个问题:JSON
包含显式的forward
数组。为了反序列化整个JSON
,您需要使用某种包装器类,例如:
public class ForwardWrapper {
private List<Forward> forward;
public List<Forward> getForward() {
return forward;
}
public void setForward(List<Forward> forward) {
this.forward = forward;
}
}
在这种情况下
ForwardWrapper fw = mapper.readValue("{\"forward\":[{\"freq\":\"78000000\"}]}", ForwardWrapper.class);
问题内容: 我有一个使用Jersey构建并部署在AppEngine中的REST服务。REST服务实现使用媒体类型的动词PUT 。数据绑定由Jackson进行。 该动词使用JSON中表示的企业部门关系为 在客户端,我使用gson将JSON表示形式转换为Java对象。然后,将对象传递给我的REST服务,它可以正常工作。 问题: 当我的JSON表示形式在集合中只有一项时 服务无法反序列化对象。 正如其他
在客户端,我使用gson将JSON表示转换为java对象。然后,我将该对象传递给我的REST服务,它可以正常工作。 问题: 当我的JSON表示在集合中只有一个项时 客户端:
无法将Json反序列化为列表集合。我使用的是Lombok,它保存字段变量: 我该怎么修好它?
谢谢你的回答。 编辑:这解决了问题:
我从Fitbit API得到一个json字符串。我想在列表对象中保存dateTime和value字段。我用的是jackson模块Kotlin。我为此创建了ActivitiesSteps数据类。 下面是我使用Jackson的代码: 并引发以下异常:
看起来杰克逊无法处理同名的属性和属性。