java 返回 json格式

package net.joystart.common.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import net.joystart.common.util.ConstantUtil;
import net.joystart.common.util.MessageResult;
import net.joystart.common.util.date.DateSerializer;
import net.joystart.common.util.date.DateToStringSerializer;
import net.joystart.common.util.date.DateToStringYYYYMMDDSerializer;
import net.joystart.common.util.gsonAdapter.NullStringToEmptyAdapterFactory;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSerializer;
import com.google.gson.TypeAdapter;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonWriter;

/**
 * 
 * @author yang yanqing
 * @date 2016年7月7日
 * BaseController 基础控制器
 */
@Controller
public class BaseController {
	
	protected Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Deprecated
	protected int pageSize = 20;
	@Deprecated
	protected int pageNumber = 1;
	
	public String toJson(Object obj){
		 GsonBuilder gb = new GsonBuilder();
	     gb.registerTypeAdapter(java.util.Date.class, new DateToStringYYYYMMDDSerializer());
	     Gson gson = gb.create();
		return gson.toJson(obj);
	}
	
	public void out(HttpServletResponse response,Object result){
		try {
            //浏览器用utf8来解析返回的数据  
			response.setHeader("Content-type", "text/html;charset=UTF-8");  
			//servlet用UTF-8转码,而不是用默认的ISO8859  
			response.setCharacterEncoding(ConstantUtil.UTF_CODE);  
			PrintWriter writer = response.getWriter();
			GsonBuilder gb = new GsonBuilder();
		    gb.registerTypeAdapter(java.util.Date.class, new DateSerializer()).setDateFormat(DateFormat.LONG);
		    Gson gson = gb.create();
			writer.print(gson.toJson(result) );
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		finally{
			
		}
	}
	public void outEd(HttpServletResponse response,Object result){
		try {
            //浏览器用utf8来解析返回的数据  
			response.setHeader("Content-type", "application/json;charset=UTF-8"); 
			response.setContentType("application/json;charset=UTF-8");
			//servlet用UTF-8转码,而不是用默认的ISO8859  
			response.setCharacterEncoding(ConstantUtil.UTF_CODE);  
			PrintWriter writer = response.getWriter();
			GsonBuilder gb = new GsonBuilder();
		    gb.registerTypeAdapter(java.util.Date.class, new DateSerializer()).setDateFormat(DateFormat.LONG);
		    Gson gson = gb.create();
		    System.out.println(gson.toJson(result));
			writer.print(gson.toJson(result));
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		finally{
			
		}
	}
	
	public void out(HttpServletResponse response,Map messageMap){
		try {
            //浏览器用utf8来解析返回的数据  
			response.setHeader("Content-type", "text/html;charset=UTF-8");  
			//servlet用UTF-8转码,而不是用默认的ISO8859  
			response.setCharacterEncoding(ConstantUtil.UTF_CODE);  
			PrintWriter writer = response.getWriter();
			 GsonBuilder gb = new GsonBuilder();
		     gb.registerTypeAdapter(java.util.Date.class, new DateSerializer()).setDateFormat(DateFormat.LONG);
		     Gson gson = gb.create();
			writer.print(gson.toJson(messageMap) );
		} catch (IOException e) {
			
			e.printStackTrace();
		}finally{
			
		}
	}
	
	public void webOut(HttpServletResponse response,Map messageMap){
		try {
            //浏览器用utf8来解析返回的数据  
			response.setHeader("Content-type", "text/html;charset=UTF-8");  
			//servlet用UTF-8转码,而不是用默认的ISO8859  
			response.setCharacterEncoding(ConstantUtil.UTF_CODE);  
			PrintWriter writer = response.getWriter();
			 GsonBuilder gb = new GsonBuilder();
		     //gb.registerTypeAdapter(java.util.Date.class, new DateSerializer()).setDateFormat(DateFormat.LONG);
		     gb.registerTypeAdapter(java.util.Date.class, new DateToStringSerializer());
		     Gson gson = gb.create();
			writer.print(gson.toJson(messageMap) );
		} catch (IOException e) {
			
			e.printStackTrace();
		}finally{
			
		}
	}
	
	public void webOut(HttpServletResponse response,Object result){
		try {
            //浏览器用utf8来解析返回的数据  
			response.setHeader("Content-type", "text/html;charset=UTF-8");  
			//servlet用UTF-8转码,而不是用默认的ISO8859  
			response.setCharacterEncoding(ConstantUtil.UTF_CODE);  
			PrintWriter writer = response.getWriter();
			 GsonBuilder gb = new GsonBuilder();
		     gb.registerTypeAdapter(java.util.Date.class, new DateToStringSerializer());
		     Gson gson = gb.create();
			writer.print(gson.toJson(result) );
		} catch (IOException e) {
			
			e.printStackTrace();
		}finally{
			
		}
	}
	
	/**
	 * 对象属性值为null时(只支持String,Integer类型),json中显示该属性,并将该属性值显示为""
	 * @param response
	 * @param result
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void outWithNull(HttpServletResponse response,MessageResult result){
		try {
            //浏览器用utf8来解析返回的数据  
			response.setHeader("Content-type", "text/html;charset=UTF-8");  
			//servlet用UTF-8转码,而不是用默认的ISO8859  
			response.setCharacterEncoding("UTF-8");  
			JsonWriter out = new JsonWriter(response.getWriter());
			 GsonBuilder gb = new GsonBuilder();
		     gb.registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).registerTypeAdapter(java.util.Date.class, new DateSerializer()).setDateFormat(DateFormat.LONG);
		     Gson gson = gb.create();
//		     Gson g = new GsonBuilder().serializeNulls().create();
		     TypeAdapter< MessageResult > adapter = gson.getAdapter(TypeToken.get(MessageResult.class));
			((TypeAdapter) adapter).write(out, result);
		} catch (IOException e) {
			
			e.printStackTrace();
		}finally{
			
		}
	}
	
	@InitBinder  
	public void initBinder(WebDataBinder binder) {  
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
		dateFormat.setLenient(false);  
		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); 
	}
	
	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getPageNumber() {
		return pageNumber;
	}

	public void setPageNumber(int pageNumber) {
		this.pageNumber = pageNumber;
	}

}
原文地址:https://www.cnblogs.com/cuijinlong/p/7524549.html