struts2 返回 Json 格式数据,关于 List 中包含对象前端却接收到空 Json 的问题

一、问题描述

在使用 mvc 框架 struts2 时,有时候需要向前端返回 json 格式的数据。但在一次返回一个 List 且泛型是一个实体时(例 List messages),前端接收到的 json 数组为空。

{"messages":[]}

action 中也添加了该属性的 getter 方法,此时 struts.xml 中 action 的配置为:


    
        messages
    

二、问题分析

在查找资料的过程中,了解到 struts2 返回类型为 json 的完整配置参数如下。其中如果不做任何属性配置,默认会序列化所有有返回值的 getter 方法的返回值。

  • 属性 root 表示从哪里开始序列化,如图则只会序列化 dataMap 这一属性
  • 属性 includeProperties 代表哪些属性会被序列化,如果包含多个属性,需要使用逗号进行分割

其他的属性的含义请看图中的注释,这里先只关注 includeProperties 属性

  
     
   dataMap  
     
   true  
     
   userList.*  
     
   userId  

三、结论

结合上图中的配置我将 includeProperties 的属性值配置为 messages.* ,前端成功获取到了 messages 列表中的值。由此可以得出结论:

struts2 在序列化 List 类型的属性时,默认只会序列化属性本身,如果需要序列化 List 类型属性中保存的对象时,还需要自行指定

指定需要序列化 List 类型属性中的哪些对象时,可以通过以下几种方式进行配置

    
  list.*
    
  list\[\d+\]\.id,list\[\d+\]\.name

你可能感兴趣的:(struts2 返回 Json 格式数据,关于 List 中包含对象前端却接收到空 Json 的问题)