如果Angular无法从Spring Boot响应中读取头信息,可能是由于CORS(跨域资源共享)问题导致的。以下是一种解决方法:
@Configuration
public class CorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:4200") // 允许Angular应用的地址
.allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的HTTP方法
.allowedHeaders("*") // 允许所有头信息
.allowCredentials(true); // 允许携带凭据(例如,cookie)
}
};
}
}
请确保将http://localhost:4200
替换为你的Angular应用程序的实际地址。
withCredentials
标志。这将允许Angular应用程序携带凭据(例如,cookie),以便服务器可以在响应头中返回所需的信息。在你的Angular应用的拦截器类中添加以下代码:
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable()
export class CustomInterceptor implements HttpInterceptor {
intercept(request: HttpRequest, next: HttpHandler): Observable> {
request = request.clone({
withCredentials: true // 允许携带凭据(例如,cookie)
});
return next.handle(request);
}
}
import { NgModule } from '@angular/core';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { CustomInterceptor } from './custom.interceptor';
@NgModule({
imports: [HttpClientModule],
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: CustomInterceptor,
multi: true
}
]
})
export class AppModule { }
通过上述步骤,你应该能够从Spring Boot响应中正确读取头信息。记得根据你的实际情况修改代码中的URL和端口。