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