Angular 11中无法获取Spring Boot响应头的问题求助
问题原因及解决方案
这问题我之前踩过一模一样的坑!核心原因是浏览器的CORS(跨域资源共享)策略限制——你在Spring Boot里自定义的link响应头属于非标准头,浏览器默认不会把它暴露给前端JavaScript代码,哪怕服务器确实返回了这个头。而Postman这类工具不受浏览器的CORS规则约束,所以能直接看到所有响应头。
具体解决方案
你需要在Spring Boot端明确配置允许暴露这个自定义头,有两种常用方式:
1. 局部接口配置(单接口生效)
直接在你的控制器方法上添加@CrossOrigin注解,指定要暴露的头:
@CrossOrigin(exposedHeaders = "link") // 新增这行 @GetMapping("/page") public ResponseEntity<?> getAllPageable(@PageableDefault(size = 10, page = 0) Pageable pageable, HttpServletRequest request) { // 原有代码逻辑不变 }
2. 全局CORS配置(所有接口生效)
如果你的项目有多个跨域接口需要暴露自定义头,推荐写一个全局配置类:
@Configuration public class GlobalCorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 匹配所有接口路径 .allowedOrigins("http://localhost:4200") // 替换成你的Angular应用实际地址 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的请求方法 .allowedHeaders("*") // 允许的请求头 .exposedHeaders("link"); // 关键:暴露自定义的link响应头 } }
验证修改
配置完成后,重启Spring Boot服务,再用Angular请求接口,你就能通过res.headers.get('link')拿到对应的头值了。如果之后还有其他自定义响应头需要前端读取,记得也把它们加入到exposedHeaders的列表里。
内容的提问来源于stack exchange,提问作者Tomas
相关产品推荐
相关产品推荐

