Java 服务器以403(禁止)状态响应

Java 服务器以403(禁止)状态响应,java,angular,spring,spring-boot,http,Java,Angular,Spring,Spring Boot,Http,当我尝试使用this.http.get和@GetMapping调用时,我能够将调用发送到spring控制器 当我尝试从this.http.get更改为this.http.post并从@GetMapping更改为@PostMapping时,我无法调用spring控制器/api/v1/basicauth方法 因为我有用户名和密码,所以我只想使用PostMapping 我的代码如下:- 棱角分明 var formData: any = new FormData(); formData.append("

当我尝试使用
this.http.get
@GetMapping
调用时,我能够将调用发送到spring控制器

当我尝试从
this.http.get
更改为
this.http.post
并从
@GetMapping
更改为
@PostMapping
时,我无法调用spring控制器
/api/v1/basicauth
方法

因为我有用户名和密码,所以我只想使用
PostMapping

我的代码如下:-

棱角分明

var formData: any = new FormData();
formData.append("userName", username);
formData.append("password", password);

let params = new HttpParams();
params = params.append('username', username);
params = params.append('password', password);
return this.http.post<any>('/api/v1/basicauth', { formData }).pipe(map((res) => {
    this.username = username;
    this.password = password;
}));
UserDetails.java

    public class UserDetails {

        private int userId;
        private String userName;
        private String password;
   }

客户端

login(username: string, password: string) {
        return this.http.post<any>('/api/v1/basicauth', { username, password })
            .pipe(map(user => {
                // eg.
                // localStorage.setItem('currentUser', JSON.stringify(user));
                return user;
            }));
登录(用户名:字符串,密码:字符串){
返回this.http.post

服务器端

login(username: string, password: string) {
        return this.http.post<any>('/api/v1/basicauth', { username, password })
            .pipe(map(user => {
                // eg.
                // localStorage.setItem('currentUser', JSON.stringify(user));
                return user;
            }));
您正在使用@RequestParam检索参数,这意味着您正在以
http://host:8080/api/auth?password=abc&...

请检查不要使用
表单数据(角度)
,因为您的控制器正在接受
@RequestBody

您的
formData
应该是

var formData = {"username": username, "password": password};

Rest将自动将其反序列化为
UserDetails
class

如何尝试使用“{username,password}”而不是“{formData}”作为“body”参数?@happyZZR1400我可以通过使用body参数this.http.gets调用spring控制器,如果尝试使用“this.http.post”进行同样的操作会发生什么?你的rest是为GET而实现的,为什么你要从angular发送post?@happyZZR1400我无法使用
this.http.post
调用我想将用户名和密码作为json对象传递,我能够单独接收uname和pwd,我想作为java对象接收,即使你在服务器端如何接收这两个?…我认为您没有在客户端和服务器上使用管道和post&get(?@GetMapping)方法。@RequestParam(name=“username”)字符串用户名,@RequestParam(name=“password”)一串password@Codelover更新的答案&我认为这不是正确的方法。有关详细信息,请访问:。我将检查该链接,但我现在说的是我正在使用作为参数,因为我无法作为对象发送。我已使用正确的代码进行更新