优雅的Angular2/Spring boot/Restful应用设计

优雅的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

我实际上正在从事一个使用以下技术的项目: 角度2, 休息 弹簧靴

我想知道这两种情况下此类应用程序的一些良好实践,因为这是我第一个将这些应用程序结合在一起的项目:

1。验证:

范例

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”}
。然后在泛型函数do
form.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;
              }
               .....