到目前为止,我一直在使用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>
控制器API如下:
@RequestMapping(value = "/groups", method = RequestMethod.GET)
public @ResponseBody
List<Group> getGroups() throws Exception {
log.info("Getting all the groups");
return myService.getAllGroups();
}
这很好用,我唯一担心的是序列化的数据量。 Jack对象序列化了Group对象的所有属性。
将@JsonIgnore用于不需要的属性就像静态绑定一样。因为它会忽略@JsonIgnore的属性,以便为将组提供给客户端的所有请求进行序列化。 (例如:要在下拉列表中填充组,只有他们的ID和名称就足够了,但要在客户端上完全填充它作为配置文件,我需要所有数据)
所以我的偏好是特定于STRUTS的配置,可以应用于每个请求。
答案 0 :(得分:0)
最简单的方法是创建一个新的GroupResource
类,其中只包含您希望从API返回的字段,并在控制器方法中从Group
转换为GroupResource
这允许您显式控制应用程序代码中序列化为JSON的内容,而不是依赖于Jackson序列化程序的注释和配置。