You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Thymeleaf时JS文件MIME为application/json被拦截如何解决

触发原因
  • 核心原因是/js/admin-register-users.js的请求实际没有返回JS文件内容,而是返回了JSON格式的响应(通常是业务错误、鉴权失败或404的统一JSON返回体),所以浏览器识别到MIME类型和预期的text/javascript不符,加上X-Content-Type-Options: nosniff响应头禁止浏览器自动嗅探类型,直接拦截了资源加载。
  • 常见的具体触发场景:
    1. 静态资源路径配置有误,或者classpath:/static/js/目录下不存在对应的js文件,Spring Boot解析不到资源后返回了JSON格式的错误响应
    2. 存在路径为/js/**的Controller接口,接口优先级高于静态资源处理器,请求直接被接口处理返回JSON
    3. 接入了Spring Security等鉴权组件,静态资源请求被拦截后返回了JSON格式的鉴权失败响应
    4. 全局配置了消息转换器,强制所有响应的Content-Type被覆盖为application/json,篡改了静态资源的响应头
修复方案
  1. 第一步先验证请求响应内容
    直接在浏览器地址栏访问https://localhost:8090/js/admin-register-users.js,查看返回内容:如果是JSON格式的错误提示,就可以按照上面的场景逐一排查。
  2. 优化静态资源配置
    删除多余的资源映射规则,简化配置如下:
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/img/**", "/css/**", "/js/**")
                .addResourceLocations("classpath:/static/img/", "classpath:/static/css/", "classpath:/static/js/")
                .setCachePeriod(3600)
                .resourceChain(true);
    }
}
  1. 排查路径冲突
    检查所有Controller的@RequestMapping配置,确认没有和/js/**路径重复的接口定义。
  2. 排查鉴权规则(如使用Spring Security)
    给静态资源路径添加放行规则,示例如下:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/js/**", "/css/**", "/img/**", "/resources/**");
    }
}
  1. 排查全局消息转换器配置
    如果配置了全局Jackson消息转换器强制覆盖响应类型,调整转换器的匹配规则,排除静态资源路径的响应处理,或提升静态资源MediaType处理器的优先级。

内容的提问来源于stack exchange,提问作者Zach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:30:03