gpt4 book ai didi

java - 最大限度地减少 Spring Web 服务渲染 JSON 数据时要序列化的数据

转载 作者:太空宇宙 更新时间:2023-11-04 15:01:50 27 4
gpt4 key购买 nike

到目前为止我一直在使用 STRUTS 作为 MVC 框架。
Struts 允许的最佳功能之一是:可以将逗号分隔的正则表达式列表传递到 JSON 结果,以限制将序列化哪些属性。只有与任何这些正则表达式匹配的属性才会包含在序列化输出中。

例如:

<action name="GetAllGroups" class="com.example.action.GroupAction"          method="getAllGroups">
<result type="json">
<param name="includeProperties">
^groups\[\d+\]\.id, ^groups\[\d+\]\.name, ^groups\[\d+\]\.parent\.id
</param>
</result>
</action>

这将仅序列化组列表中所需的参数,从而减少有效负载或冗余数据(例如:组的其他属性,如创建时间、更新时间、成员等)

现在我们正在使用 SPRING MVC,因为我们正在迁移到 Web 服务并为所有请求呈现 JSON 数据类型。具有以下配置:

<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
</list>
</property>
</bean>

Controller API如下:

@RequestMapping(value = "/groups", method = RequestMethod.GET)
public @ResponseBody
List<Group> getGroups() throws Exception {
log.info("Getting all the groups");
return myService.getAllGroups();
}

这工作正常,我唯一关心的是被序列化的数据量。Group对象的所有属性都是由jackson序列化的。

对不需要的属性使用 @JsonIgnore 就像静态绑定(bind)一样。因为它将忽略 @JsonIgnore 的属性,以对向客户端提供组的所有请求进行序列化。 (例如:要在下拉列表中填充组,只需它们的 ID 和名称就足够了,但要将其作为配置文件完全填充在客户端上,我需要所有数据)

所以我的偏好是特定于 STRUTS 的配置,它可以应用于每个请求。

最佳答案

最简单的方法是创建一个新的 GroupResource 类,其中仅包含您想要从 API 返回的字段,并将 Group 转换为 GroupResource 在您的 Controller 方法中。

这使您可以显式控制应用程序代码中序列化为 JSON 的内容,而不是依赖于 Jackson 序列化程序的注释和配置。

关于java - 最大限度地减少 Spring Web 服务渲染 JSON 数据时要序列化的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22482636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com