使用JsonResult返回json数据

<html>
  <head>
	<script type="text/javascript" src="js/jquery-1.11.3.js">
	</script>
	
	<script type="text/javascript">
	$(document).ready(function() {
  		$("#myButton1").click(function() {
  			$.post("/StudyExample/json/JSONAction.action", {}, 
  			function(data,status){
  				$("#myDiv1").html(data);
  			});
  		
  		});
	});
	
	$(document).ready(function() {
  		$("#myButton2").click(function() {
  			$.post("/StudyExample/JSONAction.action", {}, 
  			function(data,status){
  				$("#myDiv2").html(data);
  			});
  		
  		});
	});
	</script>
  </head>
  
  <body>
    <div id="myDiv1"><h2>Let AJAX change this text1</h2></div>
	<button id="myButton1" type="button">Change Content1</button>
	<div id="myDiv2"><h2>Let AJAX change this text2</h2></div>
	<button id="myButton2" type="button">Change Content2</button>
  </body>
</html>
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Arrays;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionSupport;

import com.jaeson.hibernatestudy.bean.Address;
import com.jaeson.hibernatestudy.bean.User;

@SuppressWarnings("all")
@Scope("prototype")
@Controller("jsonAction")
public class JSONAction extends ActionSupport {

	@Override
	public String execute() throws Exception {
		map.put("jaeson", new Address("海淀", 100, "1361"));
		map.put("chenzq", new Address("昌平", 101, "1352"));
		return SUCCESS;
	}
	
	/** 
	 * 在调用getWriter之前未设置编码(既调用setContentType或者setCharacterEncoding方法设置编码), 
	 * HttpServletResponse则会返回一个用默认的编码(既ISO-8859-1)的PrintWriter实例。这样就会 
	 * 造成中文乱码。而且设置编码时必须在调用getWriter之前设置,不然是无效的。 
	 */  
	public void writeJSON() throws IOException{
		
		HttpServletResponse response=ServletActionContext.getResponse();
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		/*String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"张三\",\"say\":\"Hello , i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}";
		out.println(jsonString);
		out.flush();
		out.close();*/
		Map<String, User> map = new HashMap<String, User>();
		User user1 = new User();
		user1.setId("1001");
		user1.setUserName("chenzq");
		user1.setAddress(new Address("beijing", 100021, "134"));
		User user2 = new User();
		user2.setId("1002");
		user2.setUserName("jaesonchen");
		user2.setAddress(new Address("shanghai", 200021, "133"));
		map.put("user1", user1);
		map.put("user2", user2);
		
		JSONObject json = new JSONObject();
		json.accumulate("map", map);
		//JSONObject json = JSONObject.fromObject(map);
		out.println(json.toString());
		out.flush();
		out.close();
	}
	
	private String fieldString = "String value";
	private int fieldInt = 100;
	private double fieldDouble = 99.1;
	private boolean fieldBoolean = false;
	private int[] arrayInt = {101, 102, 103};
	private List<String> list = Arrays.asList("Buenos Aires", "Córdoba La", "La Plata");
	private Map<String, Address> map = new HashMap<String, Address>();
	//field without getter method 不会被序列化
	private String fieldNoGetter = "NoGetter value";
	public String getFieldString() {
		return fieldString;
	}
	public int getFieldInt() {
		return fieldInt;
	}
	public double getFieldDouble() {
		return fieldDouble;
	}
	public boolean isFieldBoolean() {
		return fieldBoolean;
	}
	public int[] getArrayInt() {
		return arrayInt;
 	}
 	public List<String> getList() {
  		return list;
 	}
 	public Map<String, Address> getMap() {
  		return map;
 	}
 	/**
 	public String getFieldNoGetter() {
  		return fieldNoGetter;
 	}*/
}

不使用JsonResult的配置:

<action name="JSONAction" class="jsonAction" method="writeJSON" />

使用JsonResult的配置:

<package name="json" extends="json-default" namespace="/json">
   <action name="JSONAction" class="jsonAction">
     <result type="json">
      <!-- 指定内容类型,默认为application/json,IE浏览器会提示下载 -->
      <param name="contentType">text/html</param>
      <!-- 默认将会序列所有有返回值的getter方法的值,而无论该方法是否有对应属性。
         root代表从哪里开始序列化,如果root是对象则会将root对象中所有的getter方法都进行序列化。 -->  
      <!-- <param name="root">map</param> -->
      <!-- 指定是否序列化空的属性,默认为false,序列化空属性,对象为null,string为"" -->
      <!-- <param name="excludeNullProperties">true</param> -->
      <!-- 这里指定将序列化map中的那些属性 -->
      <!-- <param name="includeProperties">userList.*</param> -->
      <!-- 这里指定将要从map中排除那些属性,这些排除的属性将不被序列化,一般不与上边的参数配置同时出现。
       如果相同属性同时指定exclude和include,则exclude的优先级高,因此不序列化该属性-->  
      <!-- <param name="excludeProperties">
       SUCCESS
      </param> -->
    </result>
  </action>
 </package>
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Arrays;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionSupport;

import com.jaeson.hibernatestudy.bean.Address;
import com.jaeson.hibernatestudy.bean.User;

@SuppressWarnings("all")
@Scope("prototype")
@Controller("jsonAction")
public class JSONAction extends ActionSupport {

	@Override
	public String execute() throws Exception {
		map.put("jaeson", new Address("海淀", 100, "1361"));
		map.put("chenzq", new Address("昌平", 101, "1352"));
		return SUCCESS;
	}
	
	/** 
	 * 在调用getWriter之前未设置编码(既调用setContentType或者setCharacterEncoding方法设置编码), 
	 * HttpServletResponse则会返回一个用默认的编码(既ISO-8859-1)的PrintWriter实例。这样就会 
	 * 造成中文乱码。而且设置编码时必须在调用getWriter之前设置,不然是无效的。 
	 */  
	public void writeJSON() throws IOException{
		
		HttpServletResponse response=ServletActionContext.getResponse();
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		/*String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"张三\",\"say\":\"Hello , i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}";
		out.println(jsonString);
		out.flush();
		out.close();*/
		Map<String, User> map = new HashMap<String, User>();
		User user1 = new User();
		user1.setId("1001");
		user1.setUserName("chenzq");
		user1.setAddress(new Address("beijing", 100021, "134"));
		User user2 = new User();
		user2.setId("1002");
		user2.setUserName("jaesonchen");
		user2.setAddress(new Address("shanghai", 200021, "133"));
		map.put("user1", user1);
		map.put("user2", user2);
		
		JSONObject json = new JSONObject();
		json.accumulate("map", map);
		//JSONObject json = JSONObject.fromObject(map);
		out.println(json.toString());
		out.flush();
		out.close();
	}
	
	private String fieldString = "String value";
	private int fieldInt = 100;
	private double fieldDouble = 99.1;
	private boolean fieldBoolean = false;
	private int[] arrayInt = {101, 102, 103};
	private List<String> list = Arrays.asList("Buenos Aires", "Córdoba La", "La Plata");
	private Map<String, Address> map = new HashMap<String, Address>();
	//field without getter method 不会被序列化
	private String fieldNoGetter = "NoGetter value";
	public String getFieldString() {
		return fieldString;
	}
	public int getFieldInt() {
		return fieldInt;
	}
	public double getFieldDouble() {
		return fieldDouble;
	}
	public boolean isFieldBoolean() {
		return fieldBoolean;
	}
	public int[] getArrayInt() {
		return arrayInt;
 	}
 	public List<String> getList() {
  		return list;
 	}
 	public Map<String, Address> getMap() {
  		return map;
 	}
 	/**
 	public String getFieldNoGetter() {
  		return fieldNoGetter;
 	}*/
}

不使用JsonResult的配置:

<action name="JSONAction" class="jsonAction" method="writeJSON" />

使用JsonResult的配置:

<package name="json" extends="json-default" namespace="/json">
   <action name="JSONAction" class="jsonAction">
     <result type="json">
      <!-- 指定内容类型,默认为application/json,IE浏览器会提示下载 -->
      <param name="contentType">text/html</param>
      <!-- 默认将会序列所有有返回值的getter方法的值,而无论该方法是否有对应属性。
         root代表从哪里开始序列化,如果root是对象则会将root对象中所有的getter方法都进行序列化。 -->  
      <!-- <param name="root">map</param> -->
      <!-- 指定是否序列化空的属性,默认为false,序列化空属性,对象为null,string为"" -->
      <!-- <param name="excludeNullProperties">true</param> -->
      <!-- 这里指定将序列化map中的那些属性 -->
      <!-- <param name="includeProperties">userList.*</param> -->
      <!-- 这里指定将要从map中排除那些属性,这些排除的属性将不被序列化,一般不与上边的参数配置同时出现。
       如果相同属性同时指定exclude和include,则exclude的优先级高,因此不序列化该属性-->  
      <!-- <param name="excludeProperties">
       SUCCESS
      </param> -->
    </result>
  </action>
 </package>

猜你喜欢

转载自jaesonchen.iteye.com/blog/2287190
今日推荐