SpringMVC使用fastjson自定义Converter支持返回jsonp格式
来源:互联网 发布:win10网络图标不显示 编辑:程序博客网 时间:2024/06/04 19:07
自定义Converter
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; }
本文首次发布于个人博客“吾勇士的博客http://wuyongshi.top”,csdn博客地址为:转载请标明出处
阅读全文
0 0
- SpringMVC使用fastjson自定义Converter支持返回jsonp格式
- Retrofit2 使用FastJson作为Converter
- SpringMVC 4.1使用ResponseBodyAdvice支持jsonp
- springmvc支持jsonp
- SpringMvc 支持 jsonP
- springmvc支持jsonp
- SpringMVC 支持JSONP
- responseBody返回jsonp格式
- Springmvc返回json报converter错
- SpringMVC返回jsonp的问题
- SpringMVC+FastJson 自定义日期转换器
- SpringMVC+FastJson 自定义日期转换器
- SpringMVC通过视图配置器返回Json和跨域Jsonp格式数据
- springMVC返回json格式数据报错:No converter found for return value of type: class java.util.HashMap
- springMVC返回json格式数据报错:No converter found for return value of type: class java.util.HashMap
- Retrofit使用之自定义Converter
- springMVC 返回Json实体类属性自定义格式转换
- Android 使用Retrofit自定义Converter解析相同接口返回不同数据
- asp.net mvc Html.Partial or Html.Action
- easyUI使用datagrid分页栏不显示
- 总结IOS界面间跳转的几种方法
- SQL的连表查询
- 如何将本地项目上传至GitHub
- SpringMVC使用fastjson自定义Converter支持返回jsonp格式
- ORACLE RMAN 高级话题一(分片与压缩)
- go学习(七)——统计程序执行时间
- windows下添加路由
- allegruo 对齐器件
- Model属性生成器
- STL(七)deque双端队列容器
- sysctl
- 《neural network and deep learning》题解——ch03 如何选择神经网络的超参数