jsonp 常用util方法

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

你可能感兴趣的:(jsonp,jsonp常用方法,jsonp callback)