Ajax跨域调用后台Restful接口时的JSON转换方法
来源:互联网 发布:软件开发质量指标 编辑:程序博客网 时间:2024/05/20 06:29
类:AjaxExchange
作用:将后台取到的数据以JSON或HTML的形式返回
package org.sun.com;import java.io.OutputStreamWriter;import java.io.PrintWriter;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONArray;import net.sf.json.JsonConfig;public class AjaxExchange { // 转换成HTML形式返回,参数为String类型 public static void printData(HttpServletResponse response, String msg) { try { // 跨域配置 response.setHeader("Access-Control-Allow-Origin","*"); response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Max-Age", "3600");// 保持跨域Ajax时的Cookie response.setHeader("Access-Control-Allow-Headers", "x-auth-token, x-requested-with,Authorization,Origin, Accept, Content-Type,x-xsrf-token"); response.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("UTF-8"); PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8")); out.println(msg); out.close(); } catch (Exception e) { e.printStackTrace(); } } // 将任意类型的item转换成JSON并返回 public static void printDataJason(HttpServletResponse response, Object item) { try { // 跨域配置 response.setHeader("Access-Control-Allow-Origin","*"); response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Max-Age", "3600");// 保持跨域Ajax时的Cookie response.setHeader("Access-Control-Allow-Headers", "x-auth-token, x-requested-with,Authorization,Origin, Accept, Content-Type,x-xsrf-token"); response.setContentType("text/json;charset=utf-8"); response.setCharacterEncoding("UTF-8"); PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8")); // currentUser里面有循环导致json处理不了 JsonConfig jsonConfig = new JsonConfig(); //建立配置文件 jsonConfig.setIgnoreDefaultExcludes(false); //设置默认忽略 jsonConfig.setExcludes(new String[]{"currentUser"}); JSONArray jsonArr = JSONArray.fromObject(item, jsonConfig); out.println(jsonArr); out.close(); } catch (Exception e) { e.printStackTrace(); } } // 带JsonConfig的JSON转换 public static void printDataJason(HttpServletResponse response, Object item, JsonConfig jsonConfig) { try { // 跨域配置 response.setHeader("Access-Control-Allow-Origin","*"); response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Max-Age", "3600");// 保持跨域Ajax时的Cookie response.setHeader("Access-Control-Allow-Headers", "x-auth-token, x-requested-with,Authorization,Origin, Accept, Content-Type,x-xsrf-token"); response.setContentType("text/json;charset=utf-8"); response.setCharacterEncoding("UTF-8"); PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8")); JSONArray jsonArr = JSONArray.fromObject(item, jsonConfig); out.println(jsonArr); out.close(); } catch (Exception e) { e.printStackTrace(); } }}
这里第二个方法和第三个方法很像,区别在于第三个方法多了个JsonConfig的参数,这是用来设置Json转换时的一些参数的。
我在返回数据转Json的时候到这样的问题:
我想返回的参数是类型A,但是类型A继承了类型B,类型B里面有些数据是类型C,类型C里面有些类型是类型D
结果变成了这样A→B→C→D→...
JSONArray转换的时候,会根据这个顺序循环,把类型ABCD...里面的数据都JSON化。
如果A→B→C→D→C时,C和D产生循环的话,JSON就无法转换了。
// currentUser里面有循环导致json处理不了 JsonConfig jsonConfig = new JsonConfig(); //建立配置文件 jsonConfig.setIgnoreDefaultExcludes(false); //设置默认忽略 jsonConfig.setExcludes(new String[]{"currentUser"});我找到了发生类型循环出错的参数并在方法2中写死了。也可以在外面设置出错的参数并传到方法3中。调用方法如下:
@RequestMapping(value = "/restful/getQuestion") public void getQuestion(HttpServletRequest request, HttpServletResponse response) { RestfulResult restfulResult = new RestfulResult(); try{ // 将数据取出放入restfulResult ... restfulResult.setData(...); }catch(Exception ex){ restfulResult.setResult("Error"); restfulResult.setMessage(ex.getMessage());} AjaxExchange.printDataJason(response, restfulResult); }
用到的Jar包可以去这里下载:
jsonArray转换需要用到的Jar包
0 0
- Ajax跨域调用后台Restful接口时的JSON转换方法
- Ajax跨域调用WebApi接口方法,后台json格式传参数
- ajax传送json格式数据,调用restful接口
- restful接口的调用
- Azkaban的AJAX的RestFul接口调用事例
- Azkaban的AJAX的RestFul接口调用事例
- 基于Restful接口的网络API接口调用方法
- 没有后台接口时用ajax刷新数据的方法
- JavaScript跨域调用基于JSON的RESTful API
- 调用后台的接口跨域问题
- Ajax调用后台方法
- Ajax 调用后台方法
- ajax调用后台方法
- ajax调用后台方法
- 基于Ajax和JSON从javascript中调用后台java方法的JsonGateway
- Ajax嵌套调用WebApi接口和后台方法(传参)
- 接口后台调用方法
- ajax 调用后台接口示例
- Android 系统自动重启Bug(高通平台)
- Android 模拟器启动报错Failed to allocate memory: 8
- 【OpenCV】OpenCV轮廓检测,计算物体旋转角度
- 关键字: EL 字符串处理
- android 静默安装之后自启动
- Ajax跨域调用后台Restful接口时的JSON转换方法
- Android 系统HAL 简介
- Android获取不同手机 自身存储和外置SD卡存储路径的解决方案
- sdl学习笔记
- 设计模式----策略模式
- 我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
- java微信公众号开发入门(3)--简单消息回复
- WdatePicker日历控件使用
- display:none与visible:hidden的区别