一、JSON是什么?

:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解

析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C , C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

二 、struts2对于JSON有什么支持?

:struts2提供了一个struts2-json-plugin.jar 用于支持JSON的使用。当我们在struts2中使用JSON的时候必须导入struts2-json-plugin.jar

并且需要一下几点:

//struts2-json-plugin.jar中struts-plugin.xml配置信息:

      <struts>

        <package name="json-default" extends="struts-default">

          <result-types>

             <result-type name="json" class="org.apache.struts2.json.JSONResult"/>

          </result-types>

           <interceptors>

            <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>

           </interceptors>

        </package>

     </struts>

通过配置信息我们可以知道:

  1.json-default其实是继承了struts-default的

  2.定义了一个name为json的返回类型和一个name为json的拦截器

  3.<action name="*" class="*">

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

   </action>

     //我们需要将result的 返回类型定义为json

三、关于JSON在struts.xml中的一些属性的功能。

<action name="*"  class="*">
<result name="success" type="json">
<param name=""></param>//关于对JSON的一些定义 /*excludeProperties //代表排除Action中的哪些属性,排除多个属性时,使用逗号进行分隔(即不需要序列化的属性)
例:
<param name="excludeProperties">age</param> 排除getAge()这个方法 includeProperties //代表包含Action中的哪些属性,包含多个属性是,使用逗号进行分隔(即需要序列化的属性)
例:
<param name="includeProperties">address</param>包含getAddress() excludeNullProperties //代表排除Action中属性值为空的字段
例:
<param name="excludeNullProperties">true</param>
使用true/false 默认为false(即包含属性值为null的字段) root //代表从哪里开始序列化
例:
<param name="root">person</param> person对应的可以是一个属性,也可以是一个对象,也可以是一个集合
//当在这里定义后,只会将person进行序列化,如果person是一个对象,则会将person对象中所有的getter方法都进行序列化 注意:如果相同属性同时定义了excludeProperties和includeProperties
那么excludeProperties的优先级要高,因此不对
该属性进行序列化
*/
</result>
</action>
 

四、关于JSON在Action对象中注解的使用。

:对于JSON的注解主要有一下几个属性可以定义
name:指定序列化的时候对应的名称
例:
@JSON(name = "myname")
{
myname:"张三"
} public String getUsername() {
return username;
} serialize:对该方法进行序列化 true/false 例:
@JSON(serialize=true) 对该方法序列化,如果为false则不进行序列化
public String getUsername() {
return username;
} deserialize:不对该方法进行序列化 true/false 例:
@JSON(deserialize=true) 不对该方法序列化,如果为false则进行序列化
public String getUsername() {
return username;
} format:设置JSON对该方法的转换方式,一般用于对时间进行转换 例:
@JSON(format="yyyy-MM-dd") 则客户端接收的JSON中date对应的值为:
{
date:"2011-10-2"
}
public Date getDate() {
return date;
}

五、具体的实例:

Action:

     package org.viancent.action;  

      import java.util.Date;
  import org.apache.struts2.json.annotations.JSON;
  import com.opensymphony.xwork2.ActionSupport;

  public class GetJsonAction extends ActionSupport {
private String username;
private String password;
private int age;
private Date date; @JSON(serialize = false)
public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} @JSON(name="mypassword")
public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @JSON(format="yyyy-MM-dd")
public Date getDate() {
return date;
} public void setDate(Date date) {
this.date = date;
} @Override
public String execute() throws Exception {
this.setDate(new Date());
this.setAge(10);
this.setPassword("world");
this.setUsername("hello");
return SUCCESS;
}
}

struts.xml:

<struts>
<package name="struts2" extends="json-default">
//这里一定要继承json-default
<action name="getjsons" class="org.viancent.action.GetJsonAction">
<result name="success" type="json">
//这里一定要定义type属性为json
<param name="excludeProperties">age</param>
//排除getAge()方法
</result>
</action> </package>
</struts>

JSP:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript" src="WEB-JS/jquery-1.5.1.js"></script> //使用jquery一定要导入js
<script type="text/javascript"> //使用jquery实现异步提交
function getJson() {
$.post(
"/struts2/getjsons.action",{},
                function(returnedData,status)
{
if("success"==status)
{
alert(returnedData);
}
}
)
}
</script>
</head>
<body id="theBody">
<input type="button" value="GetJson" onclick="getJson();"> </body>
</html>

得到的结果为:

{"date":"2011-03-21","mypassword":"world"}

struct2-json的更多相关文章

  1. java MVC架构-spring mvc,struct2(理解)

    MVC架构实现基础: 基于filter或者servlet实现请求地址分析,如果需要控制类处理请求,则调用相应的控制类.调用控制类时,根据配置文件初始化控制类相关的参数.数据库连接可持久化存在.控制类处 ...

  2. Class org.apache.struts2.json.JSONWriter can not access a member of

    异常形式: Class org.apache.struts2.json.JSONWriter can not access a member of * 或是 Class com.googlecode. ...

  3. Struts2 项目 Action 查询结果异常 org.apache.struts2.json.JSONException

    问题描述 今天进行一个订单管理模块的开发时遇到一个问题:查询的订单时有时会报这个异常: org.apache.struts2.json.JSONException: java.lang.Illegal ...

  4. Android实战简易教程-第六十六枪(server端搭建和server端Json数据交互)

    学习Android有一段时间了.对server端有非常深的好奇,决定对server端的实现进行一些研究,这里实现了一个简单的小样例,用于获取server端的json数据,样例非常easy,适合刚開始学 ...

  5. 使用TSQL查询和更新 JSON 数据

    JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...

  6. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  7. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  8. Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

    背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...

  9. .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

    .NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...

  10. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

随机推荐

  1. nyoj 234 吃土豆

    描述 Bean-eating * grid. Now you want to eat the beans and collect the qualities, but everyone must ob ...

  2. hdu 5256 序列变换(LIS最长上升子序列)

    Problem Description 我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元素都必须是整数. 请输出最少需要修改多 ...

  3. c#调用Excel绘制图表

    c#调用Excel需要引用命名空间 using Microsoft.Office.Interop.Excel; 由于该程序不复杂,主要是根据不同数据画表和图,画的图像也并不复杂,因为画图和画表的操作会 ...

  4. E514:write error(file system full?)

    vi编辑某文件,保存时报错,提示:E514: write error (file system full?)---写入错误,磁盘满了? 查看磁盘空间:df -h根目录磁盘空间已满,used%100. ...

  5. 如何在程序退出的时候清除activity栈

    在公司里接手了一个后期的项目,由于项目前期对activity栈管理的不够谨慎,所以导致了在某些情况下程序退出的时候没有将activity栈清除掉.在网上找到的无非就是那几种例子,都不是最好的解决办法. ...

  6. CoutDownLatch 多线程同步辅助类

    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方法 public CountDownLatch(int count); pu ...

  7. iOS开发 数据库FMDB

    iOS开发  数据库FMDB 1.简介 需求作用: 如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000 ...

  8. iOS 中的正则匹配(工具类方法)

    正则表达式 正则表达式是对字符串操作的一种逻辑公式, 用事先定义好的一些特定字符.及这些特定字符的组合, 组成一个"规则字符串", 这个"规则字符串"用来表达对 ...

  9. C学习笔记 - 指针

    指针与数组 ,,,,}; int *p; p = a; printf("*a = %d\n",*a); printf("*p = %d\n",*p); prin ...

  10. 在现代渲染API下,封装跨平台渲染框架的尝试 - 资源管理

    小生资历浅薄,不讨论该主题的重要性与未来的意义,只是个人兴趣爱好平日对这个问题思考了很多,总觉得要写点东西记录下来.框架还没有定型,只是记录自己设计的过程. 系统要跨平台,首先得将平台相关的实现与平台 ...