`

jsonp 常用util方法

    博客分类:
  • Java
阅读更多

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

1
1
分享到:
评论

相关推荐

    详解JSON和JSONP劫持以及解决方法.docx

    "详解JSON和JSONP劫持以及解决方法" 本文主要介绍了JSON和JSONP劫持的概念、攻击过程、解决方法以及实例代码,旨在帮助读者深入理解这两种攻击方式,并提供实际有效的解决方法。 JSON劫持 JSON劫持,也称为JSON ...

    Jsonp和java操作

    使用jQuery的`$.getJSON`方法也可以实现JSONP: ```javascript $.getJSON("http://localhost:8080/Jsonp/jsonp.jsp?callback=?", function(json) { alert(json[0].name); }); ``` 在jQuery的示例中,`...

    跨域访问解决方法-jsonp

    跨域访问是Web开发中一个常见的挑战,尤其是在进行Ajax异步请求时,浏览器的同源策略(Same-origin policy)会限制JavaScript从一个源获取另一...理解JSONP的工作原理和使用方法对于任何Web开发者来说都是非常重要的。

    VUE2.0中Jsonp的使用方法

    ### VUE2.0中JSONP的使用方法 #### 1. 引入JSONP依赖 在VUE2.0项目中使用JSONP时,首先需要安装JSONP的npm包。使用npm安装命令: ```shell npm install jsonp --save ``` 然后在项目根目录下的`package.json`...

    json和jsonp数据格式返回

    - 单向通信:JSONP只能由服务器主动调用客户端指定的函数,不能由客户端发起回调,因此不支持POST等请求方法。 - 无错误处理:如果服务器返回的脚本有误,浏览器通常不会给出任何错误信息。 - 只支持GET请求:JSONP...

    jquery下利用jsonp跨域访问实现方法

    jQuery提供了`$.getJSON()`方法,它是一个用于获取JSON数据的便捷函数,同时支持JSONP模式。在跨域请求时,只需设置`dataType`为`"jsonp"`,jQuery会自动处理JSONP相关的细节。 ### 实现步骤 1. **创建回调函数**...

    JSONP解决跨域问题

    在C#中,我们需要创建一个支持JSONP的Web方法。这通常意味着方法需要接受一个回调函数名作为参数,并将返回的数据包装在这个回调函数的调用中。例如: ```csharp [WebMethod] public string GetData(string ...

    jsonp示例2则

    这里使用jQuery的`$.ajax`方法,因为其内置了对JSONP的支持: ```html &lt;!DOCTYPE html&gt; &lt;title&gt;JSONP Example &lt;script src="https://code.jquery.com/jquery-3.6.0.min.js"&gt;&lt;/script&gt; $(document).ready...

    JSONP简单调用实例

    调用方法: $.ajax({  type:'get',  async:true,  url:'地址',  dataType:'jsonp',  jsonp:'callback',  jsonCallback:'自定义的一个名字',  success:function(data){  console.log(data);  } });

    jsonp原理.txt

    JSONP(JSON with Padding)是一种用于解决浏览器同源策略限制的方法,允许网页从不同域名的服务器上加载数据。它利用了`&lt;script&gt;`标签不受同源策略限制的特点来实现跨域数据获取。 #### 二、JSONP的工作原理 在...

    利用jsonp实现百度搜索

    在实际应用中,你需要查阅百度搜索API的官方文档,了解具体的使用方法和参数要求。 通过以上步骤,我们就成功地利用JSONP实现在自己的网站中嵌入了百度搜索功能。这种技术虽然简单有效,但也有其局限性,例如缺乏...

    纯servlet实现JSONP

    JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了HTML...这种方法广泛应用于需要跨域获取JSON数据的场景,如API接口的开发。通过这个例子,我们可以更好地理解JSONP的工作机制,并能在实际项目中灵活运用。

    js跨域jsonp的使用

    CORS(Cross-Origin Resource Sharing)是另一种解决跨域问题的方法,相比JSONP,它提供了更安全、更灵活的跨域策略。CORS支持所有HTTP方法,允许自定义头部,并且可以进行预检请求(Preflight Request),确保跨域...

    Ajax结合Jsonp实例

    Jquery提供了`$.ajax()`方法来实现Ajax请求。当需要跨域时,我们可以通过设置`dataType`参数为`'jsonp'`,Jquery会自动处理Jsonp的回调函数。例如: ```javascript $.ajax({ url: '...

    Jsonp+asp.net

    这通常通过在Controller或者Web服务方法中添加特定的逻辑来实现,比如检查请求中的回调函数名(通常在查询字符串中指定),然后将数据序列化为JSON,并将其包裹在回调函数中返回。 在ASP.NET中,可以使用`System....

    后台php设置jsonp

    后台php设置jsonp

    解决跨域封装的jsonp.js文件

    解决跨域封装的jsonp

    Asp.net MVC3 实现JSONP

    `JsonpResult` 类的主要任务是重写 `ExecuteResult` 方法,这个方法负责将数据序列化并以 JSONP 的形式输出到响应流中。以下是 `JsonpResult` 类的代码: ```csharp public class JsonpResult : JsonResult { ...

    jsonp源码以及jar包

    JSONP(JSON with Padding)是一种跨域数据交互协议,它的基本...综上所述,`jsoup`是一个强大的HTML解析和处理工具,而JSONP则是一种跨域数据交互的方法。两者结合,可以帮助开发者轻松地从Web页面中获取和处理数据。

Global site tag (gtag.js) - Google Analytics