Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最小化SpringWeb服务呈现JSON数据时要序列化的数据_Java_Json_Spring_Serialization_Struts2 - Fatal编程技术网

Java 最小化SpringWeb服务呈现JSON数据时要序列化的数据

Java 最小化SpringWeb服务呈现JSON数据时要序列化的数据,java,json,spring,serialization,struts2,Java,Json,Spring,Serialization,Struts2,到目前为止,我一直使用STRUTS作为MVC框架。 struts允许的最佳功能之一是: 可以将逗号分隔的正则表达式列表传递给JSON结果,以限制将序列化哪些属性。序列化输出中将只包含与这些正则表达式中的任何一个匹配的属性 例如: ^组\[\d+\]\.id、^groups\[\d+\]\.name、^groups\[\d+\]\.parent\.id 这将仅序列化组列表的所需参数,从而减少有效负载或冗余数据(例如:组的其他属性,如创建时间、更新时间、成员等) 现在,我们正在使用Spring

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

例如:


^组\[\d+\]\.id、^groups\[\d+\]\.name、^groups\[\d+\]\.parent\.id
这将仅序列化组列表的所需参数,从而减少有效负载或冗余数据(例如:组的其他属性,如创建时间、更新时间、成员等)

现在,我们正在使用SpringMVC迁移到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();
}
@RequestMapping(value=“/groups”,method=RequestMethod.GET)
公共@ResponseBody
List getGroups()引发异常{
log.info(“获取所有组”);
返回myService.getAllGroups();
}
这很好,我唯一关心的是序列化的数据量。 组对象的所有属性都由jackson序列化

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


因此,我更喜欢STRUTS的特定配置,它可以应用于每个请求。

最简单的方法是创建一个新的
GroupResource
类,该类只包含希望从API返回的字段,并在控制器方法中从
Group
转换为
GroupResource


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

这本来是一个选项,但考虑到动态要求,我最终可能会基于所需属性的排列和组合创建多个GroupResource。在这种情况下,Group类中的注释也可能无法正常工作。您可以让控制器方法直接将输出写入
HttpServletResponse
的输出流,并根据特定条件通过不同的序列化程序传递对象
@RequestMapping(value = "/groups", method = RequestMethod.GET)
public @ResponseBody
List<Group> getGroups() throws Exception {
    log.info("Getting all the groups");
    return myService.getAllGroups();
}