优雅的Angular2/Spring boot/Restful应用设计
我实际上正在从事一个使用以下技术的项目: 角度2, 休息 弹簧靴 我想知道这两种情况下此类应用程序的一些良好实践,因为这是我第一个将这些应用程序结合在一起的项目: 1。验证: 范例优雅的Angular2/Spring boot/Restful应用设计,spring,rest,angular,spring-boot,Spring,Rest,Angular,Spring Boot,我实际上正在从事一个使用以下技术的项目: 角度2, 休息 弹簧靴 我想知道这两种情况下此类应用程序的一些良好实践,因为这是我第一个将这些应用程序结合在一起的项目: 1。验证: 范例 return new ResponseEntity<String>("email", HttpStatus.BAD_REQUEST); return new ResponseEntity<String>("username", HttpStatus.BAD_REQUEST); return n
return new ResponseEntity<String>("email", HttpStatus.BAD_REQUEST);
return new ResponseEntity<String>("username", HttpStatus.BAD_REQUEST);
return new ResponseEntity<UserDto>(userDto, HttpStatus.OK);
2。响应性
有更好的办法吗?使Rest控制器更干净的清洁剂?您想区分哪种错误?不同的状态(即从代码中考虑<代码> 401)/代码>作为验证,并显示REST状态的一般错误消息或不同的错误正文内容?在第一种情况下,您可以创建自己的HTTP服务,该服务具有类似于
ResultInterceptor
的功能。处理除401
之外的所有状态。。。第二种情况完全取决于您的实现。我真的不认为你能让它完全通用。如果您使用Rective Forms,您可以编写函数,将响应对象映射到表单字段名,并将错误设置到这些字段…因此我使用所需的表单创建自定义响应属性,然后在后端创建相同的类,这样我就有了一个互用格式,可以发送精确的信息并进行良好的组织?通常-是,我使用的方法。我假设您使用usernameAlreadyUsed
在UI中显示错误消息。相反,您可以使用*ngIf=“form.controls['email'].valid”
。最后一个问题-将响应映射到表单。假设后端返回{status:“validation”,字段:“email”,错误代码:“user.emailExists”}
。然后在泛型函数doform.controls[fieldName].setErrors({backend:{message:this.translationService.getMessage(errorCode)}})
。。。然后您只需从每个请求.subscribe(()=>{},(error)=>handleFormError(error.json(),this.form))
我现在明白了,这是一个更好的方法。。非常感谢。你的方法就是我想要的解决方案!
addUser(user: User): Observable<any> {
let headers = new Headers(
{
'Content-Type': 'application/json'
, 'Authorization': 'Bearer ' + localStorage.getItem('token_string')
}
);
let options = new RequestOptions({ headers: headers });
return this.http.post(this.url, user, options) // ...using post request
.map((res: Response) => {
// ...and calling .json() on the response to return data
return { status: res.status, body: res.text() };
})
.catch((error: any) => { //...errors if any
return Observable.throw({ status: error.status, body: error.text() });
}
);
}
this.userService.addUser(user).subscribe(
response => {
....
},
error => {
if (error.status == 401) {
if (error.body === "username") {
this.usernameAlreadyUsed = true;
this.emailAlreadyUsed = false;
}
if (error.body === "email") {
this.emailAlreadyUsed = true;
this.usernameAlreadyUsed = false;
}
.....