当在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测试时可以按预期工作。
1条答案
按热度按时间oxf4rvwz1#
您遇到的问题似乎与您如何从Angular发送POST请求有关。默认情况下,Angular的
HttpClient.post()
方法在请求体中发送带有JSON有效负载的请求,而不是作为URL参数。但是,您的服务器端代码希望将电子邮件和密码参数作为URL参数发送。要解决这个问题,你需要更新你的Angular代码,将email和密码作为URL参数发送,而不是在请求正文中发送。
下面是如何修改代码来实现这一点:
更新LoginService中的
login()
方法。