我已经制作了一种方法,可以将发布请求发送到我的spring Web应用程序以创建新用户。正在发送的对象具有3个字段,即用户名,电子邮件地址和密码。
我已经验证了在将对象发送到服务器时就存在这些值。下面是我的代码:
UserService中的方法:
createUser(newUser: UserCreateDTO): Observable<Response> {
return this.http.post<Response>(this.authUrl + "/user/create", newUser);
}
我尝试将Response
更改为any
或更改为UserCreateDTO
,但结果始终是相同的。对象到达,但字段均为空。
我的用户组件中的方法:
createUser():void{
this.loading = true;
this.userService.createUser(new UserCreateDTO(this.userForm.get('userName').value,
this.userForm.get('emailAddress').value,
this.userForm.get('password').value))
.subscribe((response: Response) => {
if(response.ok)
this.msgs.push({severity:'success', summary:'Success', detail: response.statusText});
else
this.msgs.push({severity:'error', summary:'Error', detail: response.statusText});
this.loading = false;
});
}
正在发送的对象:
export class UserCreateDTO {
userName: string;
emailAddress: string;
password: string;
constructor(userName?: string, emailAddress?: string, password?: string){
this.userName = userName;
this.emailAddress = emailAddress;
this.password = password;
}
}
这是在服务器端接收对象的端点:
@PostMapping("/create")
private ResponseEntity<String> createNewUser(UserCreateDTO newUser) {
Status status = userService.createUser(newUser);
return ResponseEntity.status(status.isSuccess() ?
HttpStatus.CREATED : HttpStatus.BAD_REQUEST).body(status.getInfo());
}
有人可以给我一些建议吗?是我的角度代码还是弹簧代码中的问题?谢谢。
编辑:
以下是请求有效负载:
{userName: "1", emailAddress: "1", password: "1"}
emailAddress
:
"1"
password
:
"1"
userName
:
"1"
是的,我认为它正在发送。但是由于空字段引起的nullpointer异常,我得到了500的响应。
答案 0 :(得分:1)
在您的控制器中,您需要告诉该方法从何处获取newUser
。在这种情况下,它来自POST正文,因此添加@RequestBody
批注,如下所示:
@PostMapping("/create")
private ResponseEntity<String> createNewUser(@RequestBody UserCreateDTO newUser) {
Status status = userService.createUser(newUser);
return ResponseEntity.status(status.isSuccess() ?
HttpStatus.CREATED : HttpStatus.BAD_REQUEST).body(status.getInfo());
}