在Angular和Spring中,请求头未传递到后端的问题通常是由于跨域请求引起的。在解决这个问题之前,你需要确保已经正确配置了后端的跨域访问。
首先,在Angular中,你可以使用HttpClient
来发送请求,并在请求中设置请求头。以下是一个示例代码:
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
@Injectable()
export class MyService {
constructor(private http: HttpClient) {}
myMethod() {
const headers = new HttpHeaders().set('Authorization', 'Bearer my-token');
const options = { headers: headers };
this.http.get('https://api.example.com/data', options)
.subscribe(
response => {
console.log(response);
},
error => {
console.log(error);
}
);
}
}
在上面的示例中,我们创建了一个HttpHeaders
对象,并设置了Authorization
请求头为Bearer my-token
。然后,我们将这个头部对象传递给请求的选项中。
接下来,在Spring中,你可以通过添加@CrossOrigin
注解来启用跨域请求,并在@RequestMapping
注解上使用headers
属性来接收请求头。以下是一个示例代码:
@RestController
@CrossOrigin(origins = "http://localhost:4200")
public class MyController {
@RequestMapping(value = "/data", method = RequestMethod.GET, headers = "Authorization")
public ResponseEntity getData(@RequestHeader("Authorization") String authorization) {
System.out.println(authorization);
// 处理请求
return new ResponseEntity<>("Data", HttpStatus.OK);
}
}
在上面的示例中,我们添加了@CrossOrigin
注解,并指定了允许跨域请求的源为http://localhost:4200
(请替换为你的前端应用程序的地址)。然后,在@RequestMapping
注解中,我们使用headers
属性来指定只接收包含Authorization
请求头的请求。在方法体中,我们可以通过@RequestHeader
注解获取请求头的值。
确保你的代码中已经正确配置了跨域访问,并且请求头的名称和值正确传递,这样就可以解决请求头未传递到后端的问题了。
上一篇:Angular和Spring-Boot(SpringSecurity):服务http.post调用中的.subscribe()无法正常工作。
下一篇:Angular和SpringBoot-保存Excel文件/第二次出现'ResponseisnotaBlob”错误