我有一个使用以下实现的基于json的REST Web服务:使用Jackson的Jetty,Jersey,Jersey-JSON。
我的方法之一收到一个Person实例,该实例的字段类型为List <String>
。即:
Public class Person {
List<String> names;
}
如果我使用名称数组来调用它,一切正常!例如:
{ "names" : [ "Jhon", "Doe" ] }
但是,如果该人只有一个名字,我的客户会创建一个值元素,例如:
{ "names" : "Jhon" }
当我尝试使用单个值调用服务时,出现异常:
Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
题:
我应该如何创建/配置Web服务,以便在将数组字段作为单个元素发送给我时能够反序列化数组字段。
先感谢您!
经过漫长的一天,又是…阅读了许多Wiki和常见问题解答之后,它终于可以工作了。
我做了什么:
故事:
我正在使用默认情况下使用(I belive)jaxb的Jersey 1.13。
我将其更改为 使用杰克逊
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
如以下所述:
这使我的球衣使用杰克逊,但问题仍然存在。杰克逊还不能反序列化数组。
我强迫使用 Jackson提供商 :
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>
your.project.packages;
org.codehaus.jackson.jaxrs</param-value>
</init-param>
是必要的步骤,但还不够。必须激活 ACCEPT_SINGLE_VALUE_AS_ARRAY 标志。
ObjectMapper objectMapper;
objectMapper = new ObjectMapper().configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
我需要定义 自定义反序列化器
public class MyResolver implements ContextResolver<ObjectMapper> {
@Override
public ObjectMapper getContext(final Class<?> objectType) {
...
return objectMapper;
}
}
为了做到这一点:
定制对象映射器
完成所有这些操作后,它仍然无法正常工作…
那讨论 依赖问题 ..
这反映了我的问题, Jackson v1.9.2 附带了 Jersey v1.13 , 我需要Jackson v2.0
我删除了jersey-json的依赖项,因为它包括杰克逊1.9.2:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
</dependency>
并直接声明依赖项:
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
</dependency>
参考:
jackson-jaxrs-json-provider
注意: 此更改将删除Jersey的使用Jaxb或Jettison的功能。
我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?
问题内容: 我试图序列化和反序列化内部对象的数组列表: HairList对象也是一个可序列化的对象。 此代码执行返回以下错误: 排队 我不知道我在做什么错。你能给个小费吗? 更新: 解决: 仅使用HairBirt的本机数组而不是ArrayList即可工作: 代替 感谢大家的帮助。 问题答案: 不要使用-而是使用二进制数据并对它进行base64编码,以将其转换为字符串而不会丢失信息。 我强烈怀疑这是
使用Spring1.5.8释放Jackson mapper,给出以下异常。 在[源:未知;行:-1,列:-1](通过引用链:com.copart.conversationapi.CallDisposition.model.vo.CallLogEntity[“CallEndTime”]) Callentity.java java pom.xml
我正在尝试将以下有效负载发布到我基于Jersey的web服务: 我的泽西岛代码: 就在Jersey给我打电话的时候,我停下了,我看到了我正在寻找的地址(上面JSON中的内容)。然而,我的数据元组不在那里。我知道Jersey正在为地址es调用我的无参数构造函数,它的setters也在被调用,但是我还没睡,因为Jersey可能会也可能不会尝试对JSON中的这些随机("数据")元组做些什么。(我说“随机
由于以下异常,我无法反序列化Java-8-locatedate JSON分析错误:无法从字符串“15/09/1978”反序列化< code>java.time.LocalDate类型的值:无法反序列化Java . time . local date(Java . time . format。无法在索引0处分析DateTimeParseException)文本“15/09/1978”; 包含Date
问题内容: 我设置了一个Eclipse WebApp项目,并将Jersey和Jackson JAR放在WEB-INF / lib目录中。我想使用JSON序列化,但无法解决此错误: 在 WEB-INF / lib目录 文件夹包含以下JAR: web.xml : Greeting.java : WebApp项目在嵌入式Tomcat v7服务器中运行(在eclipse中查看“服务器”)。 要求 : 只要