泽西岛的 JSON ArrayList

Posted

技术标签:

【中文标题】泽西岛的 JSON ArrayList【英文标题】:JSON ArrayList in Jersey 【发布时间】:2011-10-14 15:38:00 【问题描述】:

我正在尝试从 jersey 返回一个 List,它在 XML 中运行良好,但是当我将它输出为 JSON 时,它声称,“Java 类的消息正文编写器......和 ​​Java 类型......并且未找到 MIME 媒体类型 application/json”。

我没有为处理实用程序列表进行任何配置,因为我认为 jersey + jersey-json-1.9 自动处理 JSON 的这些东西,就像它处理 XML 一样。

其他人对此有任何运气吗?

【问题讨论】:

【参考方案1】:

我发现我第一次尝试解决同样的问题失败并显示此错误消息,解决方案与另一个 SO 问题 Jersey: com.sun.jersey.server.impl.template.ViewableMessageBodyWriter 中给出的相同:我忘记将 jersey-json 模块添加到我的项目中。

【讨论】:

【参考方案2】:

对于带有 JSON 的列表,您应该不需要任何包装器,但您确实需要启用 JSON 支持的“POJO 映射”样式。

【讨论】:

【参考方案3】:

回答。这需要创建一个提供者。代码如下:

@Provider
@Singleton
@Produces(MediaType.APPLICATION_JSON)
public class ContextResolver extends JacksonJaxbJsonProvider

     public ContextResolver() throws Exception 
        super();
        ObjectMapper mapper = new ObjectMapper();
        setMapper(mapper);
    

【讨论】:

【参考方案4】:

我设法在最近的 Jersey json 库(v1.14 Sep 2012)中解决了 JSON 数组“错误”。秘密成分是 JSONConfiguration 和 ContextResolver 魔术。请参阅我的以下帖子,它有一个完整的代码示例,自定义的 ContextResolver 和 rest Application 类乍一看可能有点模糊。

How to serialize Java primitives using Jersey REST

基元和零元素或单元素列表数组已正确序列化为 JSON 文档。如果 Java 列表为空,则如果没有自定义解析器,您将无法获得正确的 json[] 数组字段。我的帖子列出了您需要的所有 .jar 库。我正在使用最新的 v1.14 Jersey 存档。

【讨论】:

以上是关于泽西岛的 JSON ArrayList的主要内容,如果未能解决你的问题,请参考以下文章

如何从泽西岛资源生成 JSON?

泽西岛:具有 1 个元素的 Json 数组被序列化为对象

泽西岛错误:找不到媒体类型 = 应用程序/json 的 MessageBodyReader

泽西岛:找不到媒体类型 = 应用程序/json、类型 = 类 org.codehaus.jackson.node.ObjectNode 的 MessageBodyWriter?

泽西岛异常:严重:Java 类的消息正文阅读器

在Linux上从泽西返回Json引发异常