文档章节

SpringMVC 自动识别JSON与JSONP请求,返回基于FastJSON

loowj
 loowj
发布于 2016/03/18 13:20
字数 193
阅读 686
收藏 8
package com.loowj.web.springmvc;

import com.alibaba.fastjson.JSON;
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 org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * Created by luoweijun on 2016/3/18.
 * concat loowj@loowj.com
 */
public class FastJsonJsonpHttpMessageConverter extends FastJsonHttpMessageConverter {
	protected String[] jsonpParameterNames = new String[]{"callback","jsonp"};

	@Override
	protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
		String text = JSON.toJSONString(obj, getFeatures());
		String callback = null;
		for (int i = 0; i< jsonpParameterNames.length; i++){
			callback = request.getParameter(jsonpParameterNames[i]);
			if(callback != null) {
				break;
			}
		}
		if(StringUtils.isNotBlank(callback)){
			text = new StringBuilder(callback).append("(").append(text).append(")").toString();
		}
		outputMessage.getBody().write(text.getBytes(getCharset()));
	}

	public void setJsonpParameterNames(String[] jsonpParameterNames) {
		this.jsonpParameterNames = jsonpParameterNames;
	}
}
<!-- 启用默认配置 -->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <!-- 配置Fastjson支持 -->
            <bean class="com.loowj.web.springmvc.FastJsonJsonpHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json</value>
                    </list>
                </property>
                <property name="features">
                    <list>
                        <value>WriteMapNullValue</value>
                        <value>QuoteFieldNames</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

注意:

 方法上必须添加:@ResponseBody

$.ajax({ 
type:'POST', 
dataType: "jsonp", 
jsonp: 'jsonp',
success:function(){
}
});



 

 

© 著作权归作者所有

loowj
粉丝 23
博文 194
码字总数 145987
作品 0
上海
后端工程师
私信 提问
Web Service 那点事儿(4)—— 使用 CXF 开发 REST 服务

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

黄勇
2014/07/23
22K
43
spring mvc 与fastjson集合

在使用spring mvc框架时候,有时候请求需要返回json格式.spring默认使用jackjson,但是我需要用fastjson,每次手动转换比较麻烦,需要spring自动为我转换,配置代码如下 Spring版本4.0.0 默认使用...

origin
2014/07/22
3.9K
0
Gecco 1.1.3 发布,易用的轻量化爬虫

Gecco 1.1.3 发布了,该版本改进内容包括: 处理jsonp的时候,分号问题修复 2.支持自定义下载重试次数定义,GeccoEngine.retry(count) 3.HttpClientDownloader支持response的Set Cookie自动存...

xtuhcy
2016/05/31
2.4K
9
springMVC中fastjson支持jsonp的实现

1、fastjson自带 如果add多个parameter,会以,做字符串拼接。 2、jackson自带 3、自定义实现 fastjson支持jsonp的实现: 继承fastjson消息转换器类:com.alibaba.fastjson.support.spring.F...

菜蚜
2016/02/01
651
0
smart-doc 1.6.4 发布,Java 零注解文档生成工具

smart-doc是一个java restful api文档生成工具,smart-doc颠覆了传统类似swagger这种大量采用注解侵入来生成文档的实现方法。smart-doc完全基于接口源码分析来生成接口文档,完全做到零注解侵...

上官胡闹
09/22
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

java发送html模板的高逼格邮件

最近做了一个监测k8s服务pod水平伸缩发送邮件的功能(当pod的cpu/内存达到指定阈值后会水平扩展出多个pod、或者指定时间内pod数应扩展到指定数量),一开始写了个格式很low的邮件,像下面这样...

码农实战
14分钟前
5
0
php-fpm配置文件详解/MariaDB密码重置、慢查询日志

来源:https://blog.csdn.net/Powerful_Fy php-fpm主配置文件路径:/usr/local/php-fpm/etc/php-fpm.conf #位于安装php安装目录下的etc/目录中,该文件中最后一行将配置文件指向:include=/...

asnfuy
19分钟前
3
0
川普给埃尔多安和内堪尼亚胡的信

任性 https://twitter.com/netanyahu/status/1186647558401253377 https://edition.cnn.com/2019/10/16/politics/trump-erdogan-letter/index.htm...

Iridium
40分钟前
12
0
golang-mysql-原生

db.go package mainimport ("database/sql""time"_ "github.com/go-sql-driver/mysql")var (db *sql.DBdsn = "root:123456@tcp(127.0.0.1:3306)/test?charset=u......

李琼涛
今天
5
0
编程作业20191021092341

1编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时 间。使用#define或const创建一个表示60的符号常量或const变量。通过while 循环让用户重复输入值,直到用户输入小于或等于0的值...

1李嘉焘1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部