【问题标题】:Spring Boot JSONP with MappingJacksonValue response and strict MIME type error具有 MappingJacksonValue 响应和严格 MIME 类型错误的 Spring Boot JSONP
【发布时间】: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


    【解决方案1】:

    在调试了我的 JsonpAdvice.groovy 之后,我发现 AbstractJsonpResponseBodyAdvice 需要一个字符串列表:private final String[] jsonpQueryParamNames;

    我的初始代码使用了一个简单的字符串。这是修复:

    @ControllerAdvice
    public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
        public JsonpAdvice() {
            super(["callback"])
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-11-16
      • 2011-05-12
      • 2018-01-03
      • 1970-01-01
      • 2013-07-31
      • 2015-10-26
      • 2018-10-13
      • 1970-01-01
      • 2017-01-06
      相关资源
      最近更新 更多