Java Web返回JSON
来源:互联网 发布:js监听手机输入法弹出 编辑:程序博客网 时间:2024/04/28 13:58
Web项目中经常涉及到AJAX请求返回JSON和JSONP数据。JSON数据在服务器端和浏览器端传输,本质上就是传输字符串,不过这个字符串符合JSON语法格式。浏览器端会按照普通文本的格式接收JSON字符串,最终JSON字符串转成JSON对象通过JavaScript实现。目前部分浏览器(IE9以下浏览器没有提供)和常用的JS库都提供了JSON序列化和反序列化的方法,如jQuery的AJAX请求可以指定返回的数据格式,包括text、json、jsonp、xml、html等。
Web服务器端只要把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,则输出为falseSerializerFeature.WriteNullBooleanAsFalse,//如果List为Null,则输出为[]SerializerFeature.WriteNullListAsEmpty,//如果Number为Null,则输出为0SerializerFeature.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<String, Object> data = new HashMap<String, Object>();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 {//客户端发送的回调函数String callback = request.getParameter("callback");Map<String, Object> data = new HashMap<String, Object>();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){//如果客户端没有发送回调函数,则使用默认的回调函数ResponseJsonUtils.jsonp(response, data);}else{//使用客户端的回调函数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<String, Object> data = new HashMap<String, Object>();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<String, Object> data = new HashMap<String, Object>();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){//如果客户端没有发送回调函数,则使用默认的回调函数ResponseJsonUtils.jsonp(response, data);}else{//使用客户端的回调函数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<String, Object> data = new HashMap<String, Object>();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<String, Object> data = new HashMap<String, Object>();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){//如果客户端没有发送回调函数,则使用默认的回调函数ResponseJsonUtils.jsonp(response, data);}else{//使用客户端的回调函数ResponseJsonUtils.jsonp(response, callback, data);}}}
0 0
- Java Web返回JSON
- java web利用 ajax 返回 json
- JAVA WEB中利用@responsebody返回json
- android 调用 返回json格式的 web service java
- web api返回json数据
- java 返回json数据
- java返回json数据
- java返回json数据
- 关于Java集成json,返回json报文
- java Axis2 返回json格式
- java返回json工具类
- java方法返回json数据
- Java web 项目发送请求到 thinkphp 项目返回Json字符串
- json数据返回到web端
- Java WebRestApp后台(一):第一个java web项目(从创建到返回第一个json字符串)
- 【Java Web】: JSON 数据格式详解
- java web 接收json串
- java extjs 链接数据库返回json
- Ubuntu下安装JDK图文解析
- redhat 6 配置 yum 源的两种方法
- iOS之贝塞尔曲线
- Swift 语言指南
- Linux监控程序-----程序自动重启方法
- Java Web返回JSON
- SQL查询表中所有字段属性,字段长度,备注信息
- 当nginx配置长域名导致nginx无法启动的问题
- 矩阵乘法&&快速幂
- Oracle 11gR2 使用exp,imp命令导入与导出
- Redis学习站点
- JS(javaScript)的with用法
- 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器(图形界面版)
- Unsupported major.minor version 51.0