jsonp 常用java方法
(1)以jsonp的形式返回:函数名(json字符串)
/*** * 用于jsonp调用 * @param map : 用于构造json数据 * @param callback : 回调的javascript方法名 * @param filters : <code>SimpleBeanPropertyFilter theFilter = SimpleBeanPropertyFilter .serializeAllExcept("content"); FilterProvider filters = new SimpleFilterProvider().addFilter( Constant2.SIMPLEFILTER_JACKSON_PAPERNEWS, theFilter);</code> * @return : js函数名(json字符串) */ public static String getJsonP(Object map,String callback,FilterProvider filters) { if(ValueWidget.isNullOrEmpty(map)){ return null; } String content = null; if(map instanceof String){ content=(String)map; }else{ ObjectMapper mapper = getObjectMapper(); ObjectWriter writer=null; try { if(filters!=null){ writer=mapper.writer(filters); }else{ writer=mapper.writer(); } content=writer.writeValueAsString(map); logger.info(content); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } if(ValueWidget.isNullOrEmpty(callback)){ return content; } return callback+"("+content+");"; }
应用:
@ResponseBody @RequestMapping(value = "/json_detail", produces = SystemHWUtil.RESPONSE_CONTENTTYPE_JSON_UTF) public String jsonDetail(Model model, int id/*新闻的id*/, PaperNewsView view, HttpSession session, HttpServletRequest request, String callback) throws IOException { init(request); PaperNews news=(PaperNews) getDao().get(id); String content; /*int comment_type=0; if(type==2){//新闻 comment_type=Constant2.COMMENT_TARGET_TYPE_NEWS; }else if(type==1){ }*/ String title=null; if(news.getType()==Constant2.TYPE_NEWS){ title="新闻"; }else{ title="报料"; } long commentCount=this.newsCommentDao.getCount(null, id, 1); news.setCommentSum(commentCount); if(!ValueWidget.isNullOrEmpty(news.getPic())){ news.setPic(JSONPUtil.getPicPath(news.getPic())); } content = getJsonP(news, callback); AccessLog accessLog=logInto(request); accessLog.setDescription("手机端"+title+"详情,id:"+id); logSave(accessLog, request); return content; }
(2)去掉callback
callback({"auth_code":"v39hXq"}) -->{"auth_code":"v39hXq"}
/*** * callback({"auth_code":"v39hXq"}) -->{"auth_code":"v39hXq"} * @param input * @param callbackName * @return */ public static String deleteCallback(String input,String callbackName){ return input.replaceAll("^"+callbackName+"\\((.*\\})\\);?$", "$1"); }
应用:
/*** * convert json string to Map;e.g:{errorMessage=系统异常,请稍后再试!, id=, status=02, errorCode=error_default, method=} * @param jsonResult * @return * @throws UnsupportedEncodingException * @throws JSONException * @throws org.json.JSONException */ public static Map<String, String> getMap(String jsonResult) throws UnsupportedEncodingException, JSONException, org.json.JSONException { if(ValueWidget.isNullOrEmpty(jsonResult)){ return null; } //callback({"auth_code":"v39hXq"}) jsonResult=deleteCallback(jsonResult, "callback"); Map<String, String> resultMap =null; Map obj = (Map) JsonParser.parserRandomJsonFormat(jsonResult); if (ValueWidget.isNullOrEmpty(obj)) { return null; } List resultList = (List) obj.get("resultList"); if(ValueWidget.isNullOrEmpty(resultList)){ resultMap=obj; }else{ resultMap= new HashMap<String, String>(); for (int i = 0; i < resultList.size(); i++) { Map mp_tmp = (Map) resultList.get(i); parseMap(resultMap, mp_tmp); } } return resultMap; }
参考:http://www.cnblogs.com/quanyongan/archive/2013/04/16/3024993.html
相关推荐
"详解JSON和JSONP劫持以及解决方法" 本文主要介绍了JSON和JSONP劫持的概念、攻击过程、解决方法以及实例代码,旨在帮助读者深入理解这两种攻击方式,并提供实际有效的解决方法。 JSON劫持 JSON劫持,也称为JSON ...
使用jQuery的`$.getJSON`方法也可以实现JSONP: ```javascript $.getJSON("http://localhost:8080/Jsonp/jsonp.jsp?callback=?", function(json) { alert(json[0].name); }); ``` 在jQuery的示例中,`...
跨域访问是Web开发中一个常见的挑战,尤其是在进行Ajax异步请求时,浏览器的同源策略(Same-origin policy)会限制JavaScript从一个源获取另一...理解JSONP的工作原理和使用方法对于任何Web开发者来说都是非常重要的。
### VUE2.0中JSONP的使用方法 #### 1. 引入JSONP依赖 在VUE2.0项目中使用JSONP时,首先需要安装JSONP的npm包。使用npm安装命令: ```shell npm install jsonp --save ``` 然后在项目根目录下的`package.json`...
- 单向通信:JSONP只能由服务器主动调用客户端指定的函数,不能由客户端发起回调,因此不支持POST等请求方法。 - 无错误处理:如果服务器返回的脚本有误,浏览器通常不会给出任何错误信息。 - 只支持GET请求:JSONP...
jQuery提供了`$.getJSON()`方法,它是一个用于获取JSON数据的便捷函数,同时支持JSONP模式。在跨域请求时,只需设置`dataType`为`"jsonp"`,jQuery会自动处理JSONP相关的细节。 ### 实现步骤 1. **创建回调函数**...
在C#中,我们需要创建一个支持JSONP的Web方法。这通常意味着方法需要接受一个回调函数名作为参数,并将返回的数据包装在这个回调函数的调用中。例如: ```csharp [WebMethod] public string GetData(string ...
这里使用jQuery的`$.ajax`方法,因为其内置了对JSONP的支持: ```html <!DOCTYPE html> <title>JSONP Example <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> $(document).ready...
调用方法: $.ajax({ type:'get', async:true, url:'地址', dataType:'jsonp', jsonp:'callback', jsonCallback:'自定义的一个名字', success:function(data){ console.log(data); } });
JSONP(JSON with Padding)是一种用于解决浏览器同源策略限制的方法,允许网页从不同域名的服务器上加载数据。它利用了`<script>`标签不受同源策略限制的特点来实现跨域数据获取。 #### 二、JSONP的工作原理 在...
在实际应用中,你需要查阅百度搜索API的官方文档,了解具体的使用方法和参数要求。 通过以上步骤,我们就成功地利用JSONP实现在自己的网站中嵌入了百度搜索功能。这种技术虽然简单有效,但也有其局限性,例如缺乏...
JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了HTML...这种方法广泛应用于需要跨域获取JSON数据的场景,如API接口的开发。通过这个例子,我们可以更好地理解JSONP的工作机制,并能在实际项目中灵活运用。
CORS(Cross-Origin Resource Sharing)是另一种解决跨域问题的方法,相比JSONP,它提供了更安全、更灵活的跨域策略。CORS支持所有HTTP方法,允许自定义头部,并且可以进行预检请求(Preflight Request),确保跨域...
Jquery提供了`$.ajax()`方法来实现Ajax请求。当需要跨域时,我们可以通过设置`dataType`参数为`'jsonp'`,Jquery会自动处理Jsonp的回调函数。例如: ```javascript $.ajax({ url: '...
这通常通过在Controller或者Web服务方法中添加特定的逻辑来实现,比如检查请求中的回调函数名(通常在查询字符串中指定),然后将数据序列化为JSON,并将其包裹在回调函数中返回。 在ASP.NET中,可以使用`System....
后台php设置jsonp
解决跨域封装的jsonp
`JsonpResult` 类的主要任务是重写 `ExecuteResult` 方法,这个方法负责将数据序列化并以 JSONP 的形式输出到响应流中。以下是 `JsonpResult` 类的代码: ```csharp public class JsonpResult : JsonResult { ...
JSONP(JSON with Padding)是一种跨域数据交互协议,它的基本...综上所述,`jsoup`是一个强大的HTML解析和处理工具,而JSONP则是一种跨域数据交互的方法。两者结合,可以帮助开发者轻松地从Web页面中获取和处理数据。