com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter中MappingFastJsonValue未做jsonp判断,直接返回jsonp了
//jsonp,保留对原本直接返回MappingFastJsonValue方法的支持
//更好的方式是直接返回com.alibaba.fastjson.JSONPObject
if (value instanceof MappingFastJsonValue) {
isJsonp = true;
value = ((MappingFastJsonValue) value).getValue();
} else if (value instanceof JSONPObject) {
if(!(((JSONPObject) value).getFunction() == null) && !("".equals(((JSONPObject) value).getFunction()))){
isJsonp = true;
}
}
10条答案
按热度按时间2nc8po8w1#
看起来有没有判断都是一样的哦。 既然用了这个JSONPObject 就是jsonp了
xtupzzrd2#
是这样的,以前接口要不要跨域是前端控制的前端带了callback参数就返回javascript,不带还是按json数据返回,现在如果不做判断就不能兼容老版本了
dojqjjoe3#
1.2.35及之前版本没问题,升级之后就出现这个问题了...
zy1mlcev4#
返回的数据是json,但Response header不对,应该是content-type →application/json
现在变成了content-type →application/javascript
r7knjye25#
contentType是application/json 但是返回的内容其实是个javascript ,你们前端都没有问题吗?
如果JSONPObject中的function字段为null或者""
就会返回数据
null({})
或者 ({})axzmvihb6#
当前fastjson做了处理,默认为(即jsonp):
public static final MediaType APPLICATION_JAVASCRIPT = new MediaType("application", "javascript");
如果你想返回纯json对象,请在返回的对象上加入
@JsonView
注解,或者你通过spring注解@ControllerAdvice
自定义ResponseBodyAdvice1zmg4dgp7#
@neil4dong 前端出问题了所以才来提这个问题,业务代码没有做什么变动,只是升级了fastjson版本就出问题,小版本升级建议向下做个兼容
现在我自已重写了下方法
protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException
yzuktlbb8#
提供一下旧版本的版本号呢。 我看下能不能做个兼容。
8iwquhpp9#
1.2.35版本或之前的版本都可以..
1wnzp6jl10#
see #1538
#1538 做了新的修改, ResponseJSONP可以注解在类上面。
MappingFastJsonValue改回了原来对jsonpFunction的非空判断。
revert 了之前一位朋友对JSONPObject的修改。