SpringMVC中fastjson支持jsonp的实现
前边一篇文章主要说了下前端处理jsonp的方式,这篇主要介绍了后台接收和响应jsonp的一种方式
继承fastjson消息转换器类:com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter
package com.caiya.hongbao.web; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.converter.HttpMessageNotWritableException; import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset; /**
* fastjson消息转换器
* Created by caiya on 15/12/23.
*/
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);
}
}
}
JSONPObject类:
package com.caiya.hongbao.web; import java.io.Serializable; /**
* Created by caiya on 15/12/23.
*/
public class JSONPObject implements Serializable { private static final long serialVersionUID = -7634081032767024781L; private String function; private Object json; public JSONPObject(String function, Object json){
this.function = function;
this.json = json;
} public String getFunction() {
return function;
} public Object getJson() {
return json;
} public JSONPObject setFunction(String function) {
this.function = function;
return this;
} public JSONPObject setJson(Object json) {
this.json = json;
return this;
} }
spring-web.xml配置:
<bean id="fastJsonHttpMessageConverter"
class="com.caiya.hongbao.web.MJFastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<mvc:annotation-driven>
<mvc:message-converters>
<ref bean="fastJsonHttpMessageConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
controller实例:
/**
* 个人中心红包列表、红包匹配列表
* @param status
* @param channel
* @param shouldPay
* @param orderField
* @param orderType
* @param page
* @return
*/
@RequestMapping(value = "/user/hongbao/list", method = RequestMethod.GET)
@ResponseBody
public Object hongbaoList(Integer status, String channel, Long shouldPay, String orderField, String orderType, Page page, String callback) throws SessionException {
......
UserHongbaos userHongbaos = ......
// 如果callback不为空,那么返回jsonp格式的数据
if(StringUtils.isNotBlank(callback)){
return new JSONPObject(callback, userHongbaos);
}else {
return userHongbaos;
}
}
摘自:https://my.oschina.net/wnjustdoit/blog/612146
SpringMVC中fastjson支持jsonp的实现的更多相关文章
- springMVC中Restful支持
RESTFul支持 http://localhost:8090/user/doAdd.action?username=tony&age=8 http://localhost:8090/user ...
- SpringMVC中映射路径的用法之请求限制、命名空间
SpringMVC中映射路径的请求限制 什么是SpringMVC请求限制? 在SpringMVC中,支持对请求的设置.如果不满足限制条件的话,就不让请求访问执行方法,这样可以大大提高执行方法 的安全性 ...
- SpringMVC中的参数绑定
SpringMVC中的参数绑定 参数绑定的定义 所谓参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller.从客户端请求key/value数据(比如ge ...
- maven+springmvc+easyui+fastjson+pagehelper
1.maven配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...
- 通过扩展让ASP.NET Web API支持JSONP
同源策略(Same Origin Policy)的存在导致了"源"自A的脚本只能操作"同源"页面的DOM,"跨源"操作来源于B的页面将会被拒 ...
- SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- 如何在springMVC 中对REST服务使用mockmvc 做测试
如何在springMVC 中对REST服务使用mockmvc 做测试 博客分类: java 基础 springMVCmockMVC单元测试 spring 集成测试中对mock 的集成实在是太棒了!但 ...
- springmvc中RequestMapping的解析
在研究源码的时候,我们应该从最高层来看,所以我们先看这个接口的定义: package org.springframework.web.servlet; import javax.servlet.htt ...
- springmvc学习笔记--支持文件上传和阿里云OSS API简介
前言: Web开发中图片上传的功能很常见, 本篇博客来讲述下springmvc如何实现图片上传的功能. 主要讲述依赖包引入, 配置项, 本地存储和云存储方案(阿里云的OSS服务). 铺垫: 文件上传是 ...
随机推荐
- vlc sdl 播放视频可随窗口改变大小
#include <stdio.h> #include <stdint.h> #include <math.h> #include <stdlib.h> ...
- 【codevs1048】石子归并(初级版)
采用动态规划的原因:合并有一定次序,即:只能相邻石子进行合并. 阶段:当前合并了的区间长度 状态:区间的左右端点 状态转移方程:\(dp[l][r]=min\{dp[l][r],dp[l][k]+dp ...
- java -server 和 -client 的不同,及 java -server 时抛错原因
在dos窗口运行:java -server Error: missing `server' JVM at `C:\Program Files\Java\jre7\bin\server\jvm.dll' ...
- 文件拷贝, 使用 BIO,NIO的对比,四种写法性能分析。
测试环境: jdk 1.7 + 2G内存 测试代码基本上复制了: http://blog.csdn.net/tabactivity/article/details/9317143 1 2 3 4 5 ...
- java代码示例(6-2)
创建Customer.java /*** * 需求分析:创建客户类 * @author chenyanlong * 日期:2017/10/15 */ package com.hp.test06; pu ...
- Angular组件生命周期钩子
Angular会按以下顺序依次调用以下钩子(8个): ngOnChanges ngOnInit ngDoCheck ngAfterContentInit ngAfterContentChecked n ...
- printf()格式化输出详解
% - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少. ②-:有-表示左对齐输出,如省略表示右对齐输出. ③0:有0表示指定空位填0,如省略 ...
- Ubuntu 下 Tomcat7 的安装和配置
tomcat下载地址:http://tomcat.apache.org/download-70.cgi 声明:下面的内容和原创笔者的博文的内容差不多,不一样的只是tomcat7的安装目录不同,我按照我 ...
- 04-接口隔离原则(ISP)
1. 背景 类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类B和类D来说不是最小接口,则类B和类D不得不去实现它们不需要的方法. 2. 定义 一个类对另一个类的依赖应该建立在最小的接口 ...
- buildroot构建项目(四)--- u-boot 2017.11 适配开发板修改 2 ---- 系统启动初始化之一
一.代码分析 上一节已经分析了链接文件,知道了首先代码是从 _start 开始,之后设置了中断向量表,然后从 start.s 开始运行. _start:vectors.S (arch\arm\lib) ...