文档章节

springMVC中fastjson支持jsonp的实现

菜蚜
 菜蚜
发布于 2016/02/01 10:21
字数 349
阅读 509
收藏 4

fastjson支持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.apache.commons.lang3.StringUtils;
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"><!-- com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter -->
   <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;
    }
}

 

© 著作权归作者所有

共有 人打赏支持
菜蚜
粉丝 28
博文 76
码字总数 36325
作品 0
杭州
程序员
私信 提问
javaer/ssmbootstrap_table

ssmbootstrap_table demo 技术栈/technology stack spring+springmvc+mybatis poi3 自定义标签开发 bootstrap3/bootstrap-fileinput/jquery.fileupload bootstrap-table1.9 druid fastjson w......

javaer
2016/03/08
0
0
Web Service 那点事儿(4)—— 使用 CXF 开发 REST 服务

现在您已经学会了如何使用 CXF 开发基于 SOAP 的 Web 服务,也领略了 Spring + CXF 这个强大的组合,如果您错过了这精彩的一幕,请回头看看这篇吧: [Web Service 那点事儿(2) —— 使用 ...

黄勇
2014/07/23
0
43
Fastjson、Jackson与SpringMVC整合的MessageConverter配置

1.Jackson maven依赖 springmvc-servlet.xml中配置 2.FastJson 由于FastJson针对Spring4.2以后进行特殊优化,具体如图 所以FastJson可以分为Spring4.2及以下配置和Spring4.2以上的不同配置 ...

楠木楠
2016/11/30
1K
0
解决js处理Long类型丢失精度的问题

项目中很多时候都会用到json,常用的有fastjson,Jackson等等这些,有时候为了统一,我们通常就会约定使用某一种。 不管使用哪种,Spring MVC返回个前段Long类型的数据时,js在获取数据时会丢...

xiaomin0322
05/30
0
0
阿里开源组件 fastjson-1.1.42 发布

Fastjson 1.1.42 发布了,主要改进内容包括: 1. 修复parser在处理循环引用在某些特定场景下的bug; 2. 支持在Bean上通过JSONType配置DisableCircularReferenceDetect/BeanToArray特性; 3....

wenshao
2014/10/11
8.8K
11

没有更多内容

加载失败,请刷新页面

加载更多

binlog2sql mysql数据库闪回工具

binlog2sql工具比mysqlbinlog+sed恢复更快捷。 1、安装: 从github上下载:https://github.com/danfengcao/binlog2sql shell> git clone https://github.com/danfengcao/binlog2sql.git && c......

mickelfeng
18分钟前
0
0
SpringCloud 复杂对象接收时候对象变成LinkeHashMap

如果定义feign接口为 @PostMapping("/user/queryUserByAccountStatus") BaseResult queryUserByAccountStatus(@RequestBody AccountsTenantIdStatusArg arg); 其中BaseResult的范性应该为Lis......

xiaomin0322
18分钟前
0
0
Android/Java 读、写MP3文件ID3V1信息

MP3的歌曲信息一般分两个大版本,分别是ID3V1和ID3V2,其中V2又分为好几个版本,具体百度一下,下方的代码仅仅是支持ID3V1。 需要用到的一个辅助工具(juniversalchardet)用于解决乱码问题,...

她叫我小渝
18分钟前
0
0
thymeleaf的onclick标签传参异常

异常 org.thymeleaf.exceptions.TemplateProcessingException: Only variable expressions returning numbers or booleans are allowed in this context, any other datatypes are not trust......

EasyProgramming
19分钟前
0
0
前端杂谈: CSS 权重 (Specificity)

前端杂谈: CSS 权重 (Specificity) css 权重想必大家都听说过, 一些简单的规则大部分人也都知道: 较长的 css selector 权重会大于较短的 css selector id selector 权重高于 class selector...

ssthouse_hust
26分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部