JSON在Struts2中的正确玩法
来源:互联网 发布:钱夫人雪梨淘宝图片 编辑:程序博客网 时间:2024/04/29 00:55
- 背景
- 干货
- 添加jar包
- Struts2中如何配置
- 翻译
背景
在实现ajax与后台传输数据的时候用到了json,按照网上的文章,不停地趟雷,身心俱疲(再次吐槽一下网上那些乱七八糟的文章);万念俱灰的时候只能去硬着头皮看官方的英文文档。这篇文章最后是我的翻译。
干货
添加jar包
首先需要几个jar包
commons-lang json-lib-2.3-jdk15 //版本与我可以不一致,只要和你的struts2兼容就可以 struts2-json-plugin-2.5.1 // 同上 ezmorph commons-beanutils
一定要和你的struts2版本一致,最简单粗暴做法就是从官方下载的struts2完整包中复制(如果你没有Maven的话),这里的所有的包都是版本匹配的。
Struts2中如何配置
在Course这个Bean中
public class Course { private int id; private String name; private Set<Student> studentSet = new HashSet<>(); @JSON(serialize = false) public Set<Student> getStudentSet() { return studentSet; } public void setStudentSet(Set<Student> studentSet) { this.studentSet = studentSet; } //省略其他getter setter
在CourseAjax中
public class CourseAjax extends ActionSupport { private List listCourse; private String name; private String passwd; @JSON(serialize = false) //json化的时候不把这个field放进去 public String getPasswd() { return passwd; } public void setPasswd(String passwd) { this.passwd = passwd; } @JSON(name = "newName") // 指定json化之后该属性的名称为newName public String getName() { return name; } public void setName(String name) { this.name = name; } public List getListCourse() { return listCourse; } public void setListCourse(List listCourse) { this.listCourse = listCourse; } public String getCourses() { //给name赋值 //给listCourse赋值 return SUCCESS; }}
struts.xml中
<action name="ajaxCourses" class="com.dh.actions.CourseAjax" method="getCourses"> <result name="success" type="json"> <!-- 不指定param节点,就是默认把当前这儿Action类的对象变成json格式,可以用注解控制把哪些属性json化,json化的时候名字是什么等等 --> </result> </action>
上面的配置执行的结果是
{ "listCourse":[ { "id":1, "name":"计算机程序设计" },等等], "newName":"aha"} /* 由此可见struts2把一个对象变成json,是按照他的set方法不断的递归的。 CourseAjax有setName方法,这个name属性被JSON(name="newName")注解了,所以json中就是"newName":"aha" CourseAjaxz中有setPasswd,但是这个passwd被 JSON(serialize = false) 注解了,所以json字符串中没有这一项, CourseAjaxz中有setListCourse,所以json中有listCourse,但是因为listCourse是一个集合类型,所以还要递归下去把集合中的每一项都json化,发现集合中的每一项的类型为Course,然后就json化Course的每一个属性,这个过程也受JSON注解的控制 */
<!-- 当你的action中有一个listCourse,你不想把Course的某一个或者几个Field json化,你可以在Course的相关Field的get方法上用JSON(serialize = false)注解,还可以用下面的方式 --><param name="excludeProperties">listCourse\[\d+\]\.studentSet</param><!-- param中间如果有多个,用‘,’隔开 --><!-- 如果你只想让这个list包含course的某一个或多个Field --><param name="includeProperties">listCourse\[\d+\]\.id,listCourse\[\d+\]\.name,listCourse\[\d+\]\.teacherNam</param>
更多关于param的用法参见官方文档
翻译
//todo
0 0
- JSON在Struts2中的正确玩法
- Struts2中的json插件
- struts2中的json
- Jquery autocomplete在struts2中的使用及体会(json plugin)
- 极路由的正确玩法
- [JavaEE]Struts2路径问题(如何在jsp页面正确访问struts.xml中的action)
- 在struts2中使用JSON
- 在Struts2里使用JSON
- json在javaScrit中如何正确使用
- ionic 中的路由玩法
- 在Struts2中使用JSON AJAX
- 在Struts2中使用JSON AJAX
- JSON 在java中的使用Json
- 如何在php中正确的使用json
- 如何在php中正确的使用json
- OGNL在struts2中的应用
- Interceptor在Struts2中的应用...
- Struts2在WEB中的配置
- 如何快速office2010安装并激活
- python中的%s %是什么意思
- tshark批量切流实践和思考
- java 微信开发token验证失败的一种情况
- Android 6.0运行时申请权限
- JSON在Struts2中的正确玩法
- Caffe学习总结(一)
- IIS应用程序池服务停止如何解决
- oracle的JDBC使用preparedStatement处理char类型字段的问题
- CDH5.8安装说明
- NHibernate使用入门(十三)
- 浅析总结 Android Studio 中 Gradle 配置运行
- 每日一省之————利用数组和链表实现一个简单的HashMap
- 常见的java面试题和答案