java 返回json_Java Web返回JSON

本文详细介绍了在Java Web中如何返回JSON和JSONP格式的数据。通过使用FastJSON库,展示了如何将Java对象转换为JSON字符串,并通过HttpServletResponse以文本形式输出。同时,还提供了JSONP的支持,包括如何处理客户端传来的回调函数名。
摘要由CSDN通过智能技术生成

Web项目中经常涉及到AJAX请求返回JSON和JSONP数据。JSON数据在server端和浏览器端传输,本质上就是传输字符串,只是这个字符串符合JSON语法格式。浏览器端会依照普通文本的格式接收JSON字符串。终于JSON字符串转成JSON对象通过JavaScript实现。眼下部分浏览器(IE9下面浏览器没有提供)和经常使用的JS库都提供了JSON序列化和反序列化的方法。如jQuery的AJAX请求能够指定返回的数据格式,包含text、json、jsonp、xml、html等。

Webserver端仅仅要把Java对象数据转成JSON字符串。并把JSON字符串以文本的形式通过response输出就可以。

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.serializer.SerializerFeature;

/**

*

* Web服务端返回JSON工具类

* 工具类依赖FastJSON

* 工具类支持返回JSON和JSONP格式数据

* @author accountwcx@qq.com

*

*/

public class ResponseJsonUtils {

/**

* 默认字符编码

*/

private static String encoding = "UTF-8";

/**

* JSONP默认的回调函数

*/

private static String callback = "callback";

/**

* FastJSON的序列化设置

*/

private static SerializerFeature[] features = new SerializerFeature[]{

//输出Map中为Null的值

SerializerFeature.WriteMapNullValue,

//假设Boolean对象为Null。则输出为false

SerializerFeature.WriteNullBooleanAsFalse,

//假设List为Null。则输出为[]

SerializerFeature.WriteNullListAsEmpty,

//假设Number为Null。则输出为0

SerializerFeature.WriteNullNumberAsZero,

//输出Null字符串

SerializerFeature.WriteNullStringAsEmpty,

//格式化输出日期

SerializerFeature.WriteDateUseDateFormat

};

/**

* 把Java对象JSON序列化

* @param obj 须要JSON序列化的Java对象

* @return JSON字符串

*/

private static String toJSONString(Object obj){

return JSON.toJSONString(obj, features);

}

/**

* 返回JSON格式数据

* @param response

* @param data 待返回的Java对象

* @param encoding 返回JSON字符串的编码格式

*/

public static void json(HttpServletResponse response, Object data, String encoding){

//设置编码格式

response.setContentType("text/plain;charset=" + encoding);

response.setCharacterEncoding(encoding);

PrintWriter out = null;

try{

out = response.getWriter();

out.write(toJSONString(data));

out.flush();

}catch(IOException e){

e.printStackTrace();

}

}

/**

* 返回JSON格式数据,使用默认编码

* @param response

* @param data 待返回的Java对象

*/

public static void json(HttpServletResponse response, Object data){

json(response, data, encoding);

}

/**

* 返回JSONP数据,使用默认编码和默认回调函数

* @param response

* @param data JSONP数据

*/

public static void jsonp(HttpServletResponse response, Object data){

jsonp(response, callback, data, encoding);

}

/**

* 返回JSONP数据,使用默认编码

* @param response

* @param callback JSONP回调函数名称

* @param data JSONP数据

*/

public static void jsonp(HttpServletResponse response, String callback, Object data){

jsonp(response, callback, data, encoding);

}

/**

* 返回JSONP数据

* @param response

* @param callback JSONP回调函数名称

* @param data JSONP数据

* @param encoding JSONP数据编码

*/

public static void jsonp(HttpServletResponse response, String callback, Object data, String encoding){

StringBuffer sb = new StringBuffer(callback);

sb.append("(");

sb.append(toJSONString(data));

sb.append(");");

// 设置编码格式

response.setContentType("text/plain;charset=" + encoding);

response.setCharacterEncoding(encoding);

PrintWriter out = null;

try {

out = response.getWriter();

out.write(sb.toString());

out.flush();

} catch (IOException e) {

e.printStackTrace();

}

}

public static String getEncoding() {

return encoding;

}

public static void setEncoding(String encoding) {

ResponseJsonUtils.encoding = encoding;

}

public static String getCallback() {

return callback;

}

public static void setCallback(String callback) {

ResponseJsonUtils.callback = callback;

}

}

/**

* 在Servlet返回JSON数据

*/

@WebServlet("/json.do")

public class JsonServlet extends HttpServlet {

private static final long serialVersionUID = 7500835936131982864L;

/**

* 返回json格式数据

*/

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

Map data = new HashMap();

data.put("date", new Date());

data.put("email", "accountwcx@qq.com");

data.put("age", 30);

data.put("name", "csdn");

data.put("array", new int[]{1,2,3,4});

ResponseJsonUtils.json(response, data);

}

}

/**

* Servlet返回JSONP格式数据

*/

@WebServlet("/jsonp.do")

public class JsonpServlet extends HttpServlet {

private static final long serialVersionUID = -8343408864035108293L;

/**

* 请求会发送callback參数作为回调函数,假设没有发送callback參数则使用默认回调函数

*/

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//client发送的回调函数

String callback = request.getParameter("callback");

Map data = new HashMap();

data.put("date", new Date());

data.put("email", "accountwcx@qq.com");

data.put("age", 30);

data.put("name", "csdn");

data.put("array", new int[]{1,2,3,4});

if(callback == null || callback.length() == 0){

//假设client没有发送回调函数。则使用默认的回调函数

ResponseJsonUtils.jsonp(response, data);

}else{

//使用client的回调函数

ResponseJsonUtils.jsonp(response, callback, data);

}

}

}

/**

* 在Struts2中返回JSON和JSONP

*/

public class JsonAction extends ActionSupport {

private static final long serialVersionUID = 5391000845385666048L;

/**

* JSONP的回调函数

*/

private String callback;

/**

* 返回JSON

*/

public void json(){

HttpServletResponse response = ServletActionContext.getResponse();

Map data = new HashMap();

data.put("date", new Date());

data.put("email", "accountwcx@qq.com");

data.put("age", 30);

data.put("name", "csdn");

data.put("array", new int[]{1,2,3,4});

ResponseJsonUtils.json(response, data);

}

/**

* 返回JSONP

*/

public void jsonp(){

HttpServletResponse response = ServletActionContext.getResponse();

Map data = new HashMap();

data.put("date", new Date());

data.put("email", "accountwcx@qq.com");

data.put("age", 30);

data.put("name", "csdn");

data.put("array", new int[]{1,2,3,4});

if(callback == null || callback.length() == 0){

//假设client没有发送回调函数,则使用默认的回调函数

ResponseJsonUtils.jsonp(response, data);

}else{

//使用client的回调函数

ResponseJsonUtils.jsonp(response, callback, data);

}

}

public String getCallback() {

return callback;

}

public void setCallback(String callback) {

this.callback = callback;

}

}

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

/**

* Spring MVC返回JSON和JSONP数据

*/

@Controller

@RequestMapping("/json")

public class JsonController {

/**

* 返回JSON数据

* @param request

* @param response

*/

@RequestMapping("/json.do")

public void json(HttpServletRequest request, HttpServletResponse response){

Map data = new HashMap();

data.put("date", new Date());

data.put("email", "accountwcx@qq.com");

data.put("age", 30);

data.put("name", "csdn");

data.put("array", new int[]{1,2,3,4});

ResponseJsonUtils.json(response, data);

}

/**

* 返回JSONP数据

* @param callback JSONP的回调函数

* @param request

* @param response

*/

@RequestMapping("/jsonp.do")

public void json(String callback, HttpServletRequest request, HttpServletResponse response){

Map data = new HashMap();

data.put("date", new Date());

data.put("email", "accountwcx@qq.com");

data.put("age", 30);

data.put("name", "csdn");

data.put("array", new int[]{1,2,3,4});

if(callback == null || callback.length() == 0){

//假设client没有发送回调函数,则使用默认的回调函数

ResponseJsonUtils.jsonp(response, data);

}else{

//使用client的回调函数

ResponseJsonUtils.jsonp(response, callback, data);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值