java Angular:发送带有所需参数的POST请求时出现MissingServletRequestParameterException

hvvq6cgz  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(193)

当在Angular中发出POST请求时,我遇到了一个“MissingServletRequestParameterException”错误。错误消息指出所需的请求参数“email”不存在。但是,当我使用Postman测试API并在URL中提供email和password参数时,请求成功并返回预期结果。
我已经使用Angular的HttpClient模块和登录服务实现了登录功能。代码似乎是正确的,但我不确定为什么在使用Angular时,请求中没有包含所需的参数。
我将感谢任何关于如何解决这个问题的见解或建议。谢谢大家!
以下是API的链接:http://localhost:55624/doctors/login?email=test@gmail.com &password=1234返回:

{
    "message": "Login successful",
    "resultat": {
        "id": 1,
        "firstName": "H",
        "lastName": "H",
        "email": "test@gmail.com",
        "password": "1234"
    },
    "etat": "ok"
}
@PostMapping("/login")
    public Map<String, Object> loginDoctor(@RequestParam("email") String email, @RequestParam("password") String password) {
        Doctor doctor = doctorRepository.findByEmail(email);
        
        if (doctor != null && doctor.getPassword().equals(password)) {
            
            return Response.success("Login successful", doctor);
        } else {
            
            return Response.failure("Invalid email or password", null);
        }
    }

Angular :

//service
export class LoginService {

  private apiUrl = 'http://localhost:55624/doctors/login';
  constructor(private http: HttpClient) { }

  login(email: string, password: string): Observable<any> {
    const body = {
      email: email,
      password: password
    };

    return this.http.post(this.apiUrl, body);
  }
}
//component 
export class LoginComponent { 
  email!: string;
  password!: string;
  constructor(private loginService: LoginService) { }

  login(): void {
    this.loginService.login(this.email, this.password).subscribe(
      response => {
        // Traitement de la réponse de l'API en cas de succès
        console.log('Login successful:', response);
      },
      error => {
        // Traitement de l'erreur en cas d'échec de l'API
        console.error('Login failed:', error);
      }
    );
  }
}

我已经验证了email和password值是否正确绑定到组件属性,并且在调用login方法时可用。我还确认了API在Postman测试时可以按预期工作。

oxf4rvwz

oxf4rvwz1#

您遇到的问题似乎与您如何从Angular发送POST请求有关。默认情况下,Angular的HttpClient.post()方法在请求体中发送带有JSON有效负载的请求,而不是作为URL参数。但是,您的服务器端代码希望将电子邮件和密码参数作为URL参数发送。
要解决这个问题,你需要更新你的Angular代码,将email和密码作为URL参数发送,而不是在请求正文中发送。
下面是如何修改代码来实现这一点:
更新LoginService中的login()方法。

相关问题