SpringMVC使用fastjson自定义Converter支持返回jsonp格式(转)
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.cim.domain.dto.JSONPObject;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.converter.HttpMessageNotWritableException;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
/**
* @author 郑明亮
* @time 2017年6月1日 上午11:51:57
* @description <p>自定义转换器,拼接jsonp格式数据 </p>
* @modifyBy
* @modifyTime
* @modifyDescription<p> </p>
*/
public class MJFastJsonHttpMessageConverter extends FastJsonHttpMessageConverter {
public static final Charset UTF8 = Charset.forName("UTF-8");
private Charset charset;
private SerializerFeature[] features;
public MJFastJsonHttpMessageConverter() {
super();
this.charset = UTF8;
this.features = new SerializerFeature[0];
}
@Override
protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
// obj就是controller中注解为@ResponseBody的方法返回值对象
if(obj instanceof JSONPObject){
JSONPObject jsonpObject = (JSONPObject)obj;
OutputStream out = outputMessage.getBody();
String text = JSON.toJSONString(jsonpObject.getJson(), this.features);
String jsonpText = new StringBuilder(jsonpObject.getFunction()).append("(").append(text).append(")").toString();
byte[] bytes = jsonpText.getBytes(this.charset);
out.write(bytes);
}else{
super.writeInternal(obj, outputMessage);
}
}
}
修改spring-mvc.xml
将spring-mvc.xml中原来fastjson的转换器引用类改成自定义的Converter类
<!-- 避免IE执行AJAX时,返回JSON出现下载文件 --><!-- com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter -->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<!--改成自己的自定义转换类 -->
<bean id="jsonConverter" class="com.zml.common.util.MJFastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
<property name="features">
<array>
<value>WriteMapNullValue</value>
<value>WriteNullStringAsEmpty</value>
<value>QuoteFieldNames</value>
<value>DisableCircularReferenceDetect</value>
</array>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
Controller 方法实例
注意返回类型写成
Object
,以及添加入参callback
,根据callback是否有值来判断返回格式为json还是jsonp
/**
* @author 郑明亮
* @time 2017年6月1日 下午6:48:40
* @description <p> 根据条件查询mongoDB监控日志信息</p>
* @modifyBy
* @modifyTime
* @modifyDescription<p> </p>
* @param vo 日志查询条件扩展类
* @param typeList 监控日志类型,增 1 删2 改3 查4
* @param callback jsonp回调方法名称
* @return
*/
@RequestMapping("/queryMonitorLogs")
@ResponseBody
public Object queryMonitorLogs(MonitorLogVO vo,String collectionName,Integer [] typeList,String callback){
log.info("---入参:---"+vo);
if (typeList != null && typeList.length > 0) {
vo.setTypeList(Arrays.asList(typeList));
}
Tidings<Page<MonitorLog>> tidings = new Tidings<>();
String msg = "查询异常";
String status = ERROR;
Page<MonitorLog> page = null;
try {
page = monitorLogService.findByVO(vo,collectionName);
if (page.getTotalCount() == 0) {
msg = "查询成功,但未查询到数据";
status = SUCCESS_BUT_NULL;
}else {
msg = "查询成功";
status = SUCCESS;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tidings.setMsg(msg);
tidings.setStatus(status);
tidings.setData(page);
log.info("---出参:---"+tidings);
if (callback != null) {
return new JSONPObject(callback,tidings);
}
return tidings;
}
SpringMVC使用fastjson自定义Converter支持返回jsonp格式(转)的更多相关文章
- spring mvc fastJson 自定义类型转换(返回数据) 实现对ObjectId类型转换
json用的alibaba fastJson ValueFilter filter = new ValueFilter() { @Override public Object process(Obje ...
- 自定义统一api返回json格式(app后台框架搭建三)
在统一json自定义格式的方式有多种:1,直接重写@reposeBody的实现,2,自定义一个注解,自己去解析对象成为json字符串进行返回 第一种方式,我就不推荐,想弄得的话,可以自己去研究一下源码 ...
- SpringBoot22 Ajax跨域、SpringBoot返回JSONP、CSRF、CORS
1 扫盲知识 1.1 Ajax为什么存在跨域问题 因为浏览器处于安全性的考虑不允许JS执行跨域请求. 1.2 浏览器为什么要限制JS的跨域访问 如果浏览器允许JS的跨域请求就很容易造成 CSRF (C ...
- SpringMVC中fastjson支持jsonp的实现
前边一篇文章主要说了下前端处理jsonp的方式,这篇主要介绍了后台接收和响应jsonp的一种方式 继承fastjson消息转换器类:com.alibaba.fastjson.support.sprin ...
- SpringBoot RestController 同时支持返回xml和json格式数据
@RestController 默认支持返回json格式数据,即使不做任何配置也能返回json数据 当接口需要支持xml或json两种格式数据时应该怎么做呢? 只要引入 Jackson xml的 ma ...
- Asp.net mvc返回Xml结果,扩展Controller实现XmlResult以返回XML格式数据
我们都知道Asp.net MVC自带的Action可以有多种类型,比如ActionResult,ContentResult,JsonResult……,但是很遗憾没有支持直接返回XML的XmlResul ...
- springmvc 自定义view支持json和jsonp格式数据返回
1.如果controlloer上用@ResponseBody注解,则用<mvc:message-converter>里面配置的json解析器进行解析 <mvc:annotation- ...
- SpringMVC返回Json,自定义Json中Date类型格式
http://www.cnblogs.com/jsczljh/p/3654636.html —————————————————————————————————————————————————————— ...
- SpringMVC通过实体类返回json格式的字符串,并在前端显示
一.除了搭建springmvc框架需要的jar包外,还需要这两个jar包 jackson-core-asl-1.9.2.jar和jackson-mapper-asl-1.9.2.jar 二.web,. ...
随机推荐
- HDU 6208 The Dominator of Strings 后缀自动机
The Dominator of Strings Time Limit: 3000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java ...
- cf-341C Iahub and Permutations
C. Iahub and Permutations time limit per test 1 second memory limit per test 256 megabytes input sta ...
- python文件读写方式
window下换行\r\n linux.unix.mac下都是\n - 以二进制的形式wb写入,同样以二进制的方式读取rb ``` f = open('file name','wb') f.write ...
- 常见 WEB 安全漏洞(转)
SQL注入 成因:程序未对用户的输入的内容进行过滤,从而直接代入数据库查询,所以导致了sql 注入 漏洞 . 思路:在URL处可以通过 单引号 和 and 1=1 and 1=2 等语句进行手工测试s ...
- PHP接口中的静态变量、常量与类中静态变量、常量的区别
接口: 1 不能够定义静态变量(常量除外) 2 定义的常量 const YOUCONST = VALUE,不能在子类中覆盖,在子类中以 interfaceName::YOUCONST的方式调用 3 不 ...
- memcache-session-manager(flexjson)
MSM项目FlexJson序列化参考文档. 序号(步骤) 需求描述 jar包列表: spymemcached-2.11.1.jar memcached-session-manager-tc8-1.8. ...
- Django的基础操作总结
1:准备开始 建立一个新的project: django-admin.py startproject XXXXXX(名称) 建立一个新的App:python manage.py startapp XX ...
- 父亲节感恩回馈PSD海报
父亲节感恩回馈PSD素材免费下载海报适用于父亲节海报设计 http://www.huiyi8.com/psd/
- RQNOJ 57 找啊找啊找GF:01背包
题目链接:https://www.rqnoj.cn/problem/57 题意: sqybi在七夕这天太无聊了,所以他想去给自己找GF. 总共有n个MM. 搞定第i个MM要花费rmb[i]块大洋.rp ...
- 分享知识-快乐自己:Hibernate 关联映射
关联关系映射--概念: 关联关系是使用最多的一种关系,非常重要.在内存中反映为实体关系,映射到DB中为主外键关系. 实体间的关联,即对外键的维护.关联关系的发生,即对外键数据的改变. 外键:外面的主键 ...