【发布时间】:2017-05-02 17:27:00
【问题描述】:
我已经阅读了很多关于 Spring 4 的 JSONP 支持的文章,但我仍然缺乏清晰的解释来使其与正确的媒体类型(在 chrome 下)一起工作
1) 我添加了 JsonpAdvice cfr Jackson JSONP Support
@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice() {
super("callback");
}
}
2) 我的控制器使用 MappingJacksonValue* 包装响应
@RequestMapping(value = '/api/test', method = RequestMethod.GET)
@ResponseBody
public Object test(HttpServletRequest request) {
List<String> result = new ArrayList<String>();
result.add("hello");
result.add("world");
if(request.getParameter('callback')){
MappingJacksonValue value = new MappingJacksonValue(result)
value.setJsonpFunction(request.getParameter('callback'))
return value
}
return result
}
不确定 MappingJacksonValue 是否必要,或者 MappingJackson2HttpMessageConverter 是否会解决这个问题?
3) 我在 application.yml 中添加了明确的媒体类型:
spring:
profiles.active: development
jackson.property-naming-strategy: SNAKE_CASE
mvc:
media-types:
json: 'application/json'
xml: 'application/xml'
jsonp: 'application/javascript'
但是我仍然收到 Chrome 中的以下错误:
拒绝执行来自“https://example.com/api/test?callback=jQuery22406993800323428312_1481922214995&_=1481922214996”的脚本 因为它的 MIME 类型 ('application/json') 不可执行,并且启用了严格的 MIME 类型检查。
缺少任何步骤?还是配置太多?
【问题讨论】:
标签: json spring spring-mvc spring-boot jsonp