如何让 Java / Spring MVC 返回基于 jsonapi.org ID 的格式?

Posted

技术标签:

【中文标题】如何让 Java / Spring MVC 返回基于 jsonapi.org ID 的格式?【英文标题】:How can I get Java / Spring MVC to return jsonapi.org ID based format? 【发布时间】:2013-11-28 00:23:20 【问题描述】:

我正在实现一个供 Ember-Data REST 适配器使用的 JSON API。

Ember-Data REST 适配器需要返回的 JSON 遵循以下格式: http://jsonapi.org/format/

Ember-Data 文档: http://emberjs.com/guides/models/the-rest-adapter/#toc_json-conventions

我知道如何使用 Spring MVC 3.2 / Jackson 返回 JSON,这不是问题。但是,JSON 格式必须遵守 jsonapi.org 中指定的格式。

如果您在 google 上搜索“ember data sweetpie 适配器”,您可以找到一个示例 Django 实现(抱歉,没有足够的信誉点用于链接 [原文如此]),并且 rable 似乎也有一个。

似乎 jsonapi.org 是多个框架/语言的标准。

我真的需要自己在 Java 中实现这个标准吗?

任何帮助/指针将不胜感激。

非常感谢!

【问题讨论】:

您可能需要实现自定义 Jackson 序列化程序。 是的,这可能是唯一的解决方案。我真的找不到关于 Java 实现的任何东西。似乎新的 Spring MVC 3.2 HyperMedia 格式使用超文本应用程序语言 (HAL) [stateless.co/hal_specification.html],但这种格式似乎已被 jsonapi.org 格式 [jsonapi.org/faq/] 拒绝。如果我有时间编写这样的序列化程序,我会确保开源它...... 序列化器 + 解析器,实际上 :-) 需要完整的 CRUD 操作集。真可惜。我想我现在必须将 Ember Data 放在我的“好有”列表中。 【参考方案1】:

Genson 似乎支持 JSONAPI 格式。

这是一个示例单元测试:

JsonSerDeserSymetricTest.java

演示将提要反序列化到类中。课程包括:

Feed.java - 有一个 id 字段 Link.java - 有一个 href 字段

Genson 将与Spring MVC 和Jersey for JAX-RS 集成。

【讨论】:

Genson 或该类中没有任何类似于 jsonapi 规范的内容。【参考方案2】:

我认为您可以像这样更改 spring 配置文件中的 JSON 属性:

<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
    <list>
        <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
            <property name="prefixJson" value="true" />
        </bean>
    </list>
</property>
</bean>

你也可以看看Spring JSON Mapping。

我希望这会有所帮助!

【讨论】:

【参考方案3】:

Java 有一些 JSON:API 实现:

Katharsis 支持 Spring,但不知何故死了多年 Crnk 支持 Spring Boot 2 远不止 JSON:API 序列化器/反序列化器 JSON:API for Spring HATEOAS 基于 Spring HATEOAS 和 Jackson 并支持 Boot 2,非常轻量级但新鲜

澄清一下,我没有使用任何库,但如果必须,我会尝试 Kai Toedter 的最后一个库,除非我需要一个非常大的系统,仅包含 JSON:API,这样我就可以从所有额外的库中受益魔法。

【讨论】:

以上是关于如何让 Java / Spring MVC 返回基于 jsonapi.org ID 的格式?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA spring MVC 前台如何取得后台返回的map类型的数据?

在 Spring MVC 中获取根/基 URL

Thymeleaf (Java Spring):无法让 mvc.uri 工作

spring mvc 异常如何处理

如何设定springmvc的reponse的字符集

Spring MVC 返回 406 到控制器测试