您的位置:首页 > 编程语言 > Java开发

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

2016-03-18 13:20 441 查看
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(){
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: