struts2-json-plugin-2.2.3 使用

最近在做struts+ajax+json项目,项目中使用了struts2-json-plugin-2.2.3.jar(一款json转化插件),研究了一段时间,今天来总结一下具体的使用过程。

使用struts2-json-plugin-2.2.3.jar需要理解以下几点:1、struts2-json-plugin-2.2.3.jar就是一个将对象属性转化成json的东东,2、要转化的对象中必须要有get打头的函数才可以(所以,如果使用struts2-json-plugin-2.2.3.jar,尽量避免在要转化的对象中将不想转化json的的函数使用get*打头),不多说了,下面看配置:

1、我的程序目录结构,由于这是一个struts插件,所以必须要有struts才可以。

2、我的java文件:

StudentEntity.java

[java] view plaincopy

  1. import java.io.Serializable;
  2. public class StudentEntity implements Serializable {
  3. private String stuName;
  4. private String stuAge;
  5. private String stuSex;
  6. public String getStuAge() {
  7. return stuAge;
  8. }
  9. public void setStuAge(String stuAge) {
  10. this.stuAge = stuAge;
  11. }
  12. public String getStuName() {
  13. return stuName;
  14. }
  15. public void setStuName(String stuName) {
  16. this.stuName = stuName;
  17. }
  18. public String getStuSex() {
  19. return stuSex;
  20. }
  21. public void setStuSex(String stuSex) {
  22. this.stuSex = stuSex;
  23. }
  24. }

TeacherEntity.java

[java] view plaincopy

  1. import java.io.Serializable;
  2. public class TeacherEntity implements Serializable {
  3. private String teacName;
  4. private String teacAge;
  5. private String teacSex;
  6. public String getTeacAge() {
  7. return teacAge;
  8. }
  9. public void setTeacAge(String teacAge) {
  10. this.teacAge = teacAge;
  11. }
  12. public String getTeacName() {
  13. return teacName;
  14. }
  15. public void setTeacName(String teacName) {
  16. this.teacName = teacName;
  17. }
  18. public String getTeacSex() {
  19. return teacSex;
  20. }
  21. public void setTeacSex(String teacSex) {
  22. this.teacSex = teacSex;
  23. }
  24. }

StrIndex.java(这是一个action,命名不规范)

[java] view plaincopy

  1. import java.util.Date;
  2. import org.apache.struts2.json.annotations.JSON;
  3. import com.opensymphony.xwork2.ActionSupport;
  4. public class StrIndex extends ActionSupport {
  5. private TeacherEntity teacher=new TeacherEntity();
  6. private StudentEntity student=new StudentEntity();
  7. private Date nowd=new Date();
  8. public String toIndex(){
  9. teacher.setTeacName("张三");
  10. teacher.setTeacAge("100");
  11. teacher.setTeacSex("男男");
  12. student.setStuName("李老师");
  13. return SUCCESS;
  14. }
  15. // 是否转换该对象
  16. //  @JSON(serialize=true)
  17. //  @JSON(name="newName")
  18. public StudentEntity getStudent() {
  19. return student;
  20. }
  21. public void setStudent(StudentEntity student) {
  22. this.student = student;
  23. }
  24. public TeacherEntity getTeacher() {
  25. return teacher;
  26. }
  27. public void setTeacher(TeacherEntity teacher) {
  28. this.teacher = teacher;
  29. }
  30. @JSON(format="yyyy-MM-dd")
  31. public Date getNowd() {
  32. return nowd;
  33. }
  34. public void setNowd(Date nowd) {
  35. this.nowd = nowd;
  36. }
  37. }

紧接着是我的struts配置文件:

[html] view plaincopy

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6. <package name="test-default" extends="json-default">
  7. <action name="ind" class="StrIndex" method="toIndex">
  8. <result name="success" type="json">
  9. </result>
  10. </action>
  11. </package>
  12. </struts>

3、简单配置说明

在struts中使用struts2-json-plugin-2.2.3.jar需要将要返回json的action配置在

[html] view plaincopy

  1. <package name="test-default" extends="json-default">
  2. ...
  3. ...
  4. </package>

中,注意extends="json-default"继承的是“json-default" 我们正常配置struts是使用‘struts-default’,所以需要将返回json的action和普通action分开使用两个package进行配置

[html] view plaincopy

  1. <package name="test-default" extends="json-default">
  2. ...
  3. ...
  4. </package>
  5. <package name="struts-default" extends="struts-default">
  6. ...
  7. ...
  8. </package>

在json package中的acton配置

[html] view plaincopy

  1. <result name="success" type="json"></result>

便可以成功的转化json,结果如

[plain] view plaincopy

  1. {"nowd":"2012-12-27T22:23:13","student":
    {"stuAge":null,"stuName":"李老师","stuSex":null},"teacher":
    {"teacAge":"100","teacName":"张三","teacSex":"男男"}}

4、拦截器配置

因为json插件的原理是将action中所有以get打头的函数全部转化,包括bena中的bean(如本案例所示,会将action中
student中的name以及age等全部转化),如果bean太多这会造成巨大浪费,使用拦截器可以根据需要将bean转化成json。

4.1、配置什么属性转化什么属性,如下配置

[html] view plaincopy

  1. <result name="success" type="json">
  2. <param name="includeProperties">
  3. teacher\.teacName,teacher\.teacAge
  4. </param>
  5. </result>

在result中配置param标签,同时为param标签指定includeProperties属性,通过以上配置可以让json插件只转化param配置的属性。结果如

[plain] view plaincopy

  1. {"teacher":{"teacAge":"100","teacName":"张三"}}

4.2、只返回指定属性的值,如下配置

[html] view plaincopy

  1. <result name="success" type="json">
  2. <param name="root">
  3. teacher.teacName
  4. </param>
  5. </result>

在result中配置param标签,同时为param标签指定root属性,通过以上配置可以让json插件只转化param配置的属性,如

[plain] view plaincopy

  1. "张三"

4.3、不想转化某些对象、属性

[html] view plaincopy

  1. <result name="success" type="json">
  2. <param name="excludeProperties">
  3. teacher\.teacName
  4. </param>
  5. </result>

在result中配置param标签,同时为param标签指定excludeProperties属性,通过以上配置可以让json插件不转化param配置的属性,如

[plain] view plaincopy

  1. {"nowd":"2012-12-27T22:34:00","student":
    {"stuAge":null,"stuName":"李老师","stuSex":null},"teacher":
    {"teacAge":"100","teacSex":"男男"}}

5、json注解使用

我目前所知道的json插件提供四种注解

serialize:设置是否序列化该属性

[java] view plaincopy

  1. @JSON(serialize=true)
  2. public StudentEntity getStudent() {
  3. return student;
  4. }

deserialize:设置是否反序列化该属性。

[java] view plaincopy

  1. @JSON(deserialize=true)
  2. public StudentEntity getStudent() {
  3. return student;
  4. }

format:设置用于格式化输出、解析日期表单域的格式。例如"yyyy-MM-dd‘T‘HH:mm:ss"。

[java] view plaincopy

  1. @JSON(format="yyyy-MM-dd")
  2. public Date getNowd() {
  3. return nowd;
  4. }

name:可改变序列后的属性明

[java] view plaincopy

  1. @JSON(name="newName")
  2. public StudentEntity getStudent() {
  3. return student;
  4. }

原文地址:http://blog.csdn.net/sys8090/article/details/8445430

时间: 2024-10-17 02:40:27

struts2-json-plugin-2.2.3 使用的相关文章

记录struts2 json plugin 对字符串数组类型的处理

当前项目中,一开发人员在action中定义了一个字符串数组类型的属性,需要以json格式返回到页面(先不论这种设计是否最优), 结果在做页面调试时发现总是无法在ajax的success方法中获取到该属性.后台action调试发现该数组已经正确赋值,get 方法也没有问题,action相关代码如下: private String[] traceList; private String unitName; ... public String queryTrace(){ unitName = "tes

Android+struts2+JSON方式的手机开发(Login)

在手机的后台服务无论是调用WebService还是Http请求,多数都是采用Android的HttpClient实现相关的调用实现.本文实现Android+Struts2+JSON方式实现为手机前台提供服务. 涉及的知识点: 1.Struts2框架的搭建(包括Struts2的jSON插件) 2.Android前台访问Web采用HttpClient方式. 3.Android采用JSON的解析. 功能:模拟远程登录流程: 手机后台服务:由于采用Struts2的JSON响应格式,响应详细会自动转变为J

Class org.apache.struts2.json.JSONWriter can not access a member of class org.springframework.aop.TruePointcut with modifiers &quot;public&quot;

Spring注入Action使用Json错误:org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.IllegalAccessException: Class org.apache.struts2.json.JSONWri

org.apache.struts2.json.JSONWriter can not access a member of class org.apache.commons.dbcp...

之前在用ssh整合json时一直发现前台获取不到json的返回数据,直接运行action出现以下错误: HTTP Status 500 - org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.

struts2 json 输出日期格式不正确

struts2 输出json中 日期出现:2013-12-17T15:57:47 错误格式的数据 原因:struts2 json插件对日期的格式化有问题 解决方法:在实体类的日期的get方法上加注解:@JSON(format="yy-MM-dd HH:mm:ss") 例如: @JSON(format = "yy-MM-dd HH:mm:ss") public Date getFindtime() { return findtime; }

Struts2+json+hignchart(简单柱状图实现--适合jquery小白)

做了一个简单的基于Struts2 + Json + HighChart的小例子,费了一下午+晚上的时间,虽然简单,但对于我这种Jquery+Ajax小白的人还是很值得记录的. 哈哈哈 # 0. 关键点找到highchart的模板网站 https://www.hcharts.cn/docs/basic-tooltip # 1. 关键点,在struts.xml中配置返回类型为json <action name="queryItemsJson" class="com.best

struts2 java.lang.StackOverflowError org.apache.struts2.json.JSONWriter

1. 问题描述: 页面通过异步访问action,    action的方法通过map封装数据,struts的result的type设置为json,后台报错 六月 25, 2016 6:54:33 下午 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [default] in context with path [/msf] threw exception [Fil

报org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException:的错误

HTTP Status 500 - type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.

org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException异常解决

org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246) org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178) org.apache.struts2.json.JSONWriter.p

struts2+json+jquery局部刷新实现注册验证

struts2+json+jquery局部刷新实现注册验证 1.项目需要导入的jar包 在web项目的WebRoot/WEB-INF/lib目录下导入以下包 2.在src目录下建立包com.entity,里面建立java类:UserInfo.java .  MailSenderInfo.java UserInfo.java package com.entity; import java.io.Serializable; /** * 说明:用户实体类 * @author wangcunhuazi