从spring-boot rest控制器返回JSON对象

时间:2018-06-21 12:27:34

标签: java spring spring-data angular5

我正在尝试检查用户名在spring-boot中是否唯一。 我想将结果作为JSON对象发送。 这是REST控制器

@RequestMapping(value="/checkEmailUnique",method=RequestMethod.POST)
public String checkEmailUnique(@RequestBody String username){

    AppUser app = userRepo.findByUsername(username);
    if(app!=null){
        // I want to return somthing like emailNotTaken: true
    }
    else{
        // and here : emailNotTaken: false  
    }
}

我想获得角度结果,以便在组件中显示错误消息。 我该怎么办?

角形侧面

client.Service.Ts

checkEmailNotTaken(email:string){
    if(this.authService.getToken()==null) {
      this.authService.loadToken();
    }
    return this.http.post(this.host+
      "/checkEmailUnique/",{email},{headers:new HttpHeaders({'Authorization':this.authService.getToken()})});
  }

在client.component.ts

ngOnInit() {

    this.form = this.formBuilder.group({
      prenom: ['', Validators.required],
      nom: ['', Validators.required],
      tel: ['', Validators.required],
      cin: ['', Validators.required],
      username: ['', Validators.required , Validators.email  , this.validateEmailNotTaken.bind(this)],
      passwordG: this.formBuilder.group({
        password: ['',[Validators.required,Validators.minLength(9)]],
        Confirmationpassword : ['',[Validators.required,Validators.minLength(9)]]

      }, {validator: passwordMatch})

    });
  }

    validateEmailNotTaken(control: AbstractControl) {
        return this.clientService.checkEmailNotTaken(control.value).map(res => {
          return  // what to do here ?
        });

      }

编辑

@RequestMapping(value="/checkEmailUnique",method=RequestMethod.POST)
    public EmailStatusCheckJson checkEmailUnique(@RequestBody final String username){

        final EmailStatusCheckJson returnValue = new EmailStatusCheckJson();


         AppUser app = userRepo.findByUsername(username);


         if(app!=null){
             returnValue.setEmailIsAvailable(false);
         }
         else{
             returnValue.setEmailIsAvailable(true);

         }

         return returnValue;
    }

3 个答案:

答案 0 :(得分:5)

如果您使用的是spring-boot-starter-web, 您的项目已设置为返回JSON。 代替String作为checkEmailUnique的返回值, 使用您创建的对象类型。

这里是一个例子:

public class EmailStatusCheckJson
{
    private Boolean emailIsAvailable;

    public Boolean getEmailIsAvailable()
    {
        return emailIsAvailable;
    }

    public void setEmailIsAvailable(
        final Boolean newValue)
    {
        emailIsAvailable = newValue
    }
}


@RequestMapping(value="/checkEmailUnique",method=RequestMethod.POST)
public EmailStatusCheckJson checkEmailUnique(@RequestBody final String username)
{
    final EmailStatusCheckJson returnValue = new EmailStatusCheckJson();

    if (...) // email is available.
    {
        returnValue.setEmailIsAvailable(true);
    }
    else
    {
        returnValue.setEmailIsAvailable(false);
    }

    return returnValue;        
}

已编辑 添加了更多示例。

答案 1 :(得分:1)

Rest方法的返回类型为String。可以代替用户定义的对象使用用户定义的对象在其中放置布尔变量的对象。状态,您可以发送用户名是否存在。根据其他方面的响应,您可以向“角度”前进。

答案 2 :(得分:0)

您还可以使用ResponseEntity作为RestController的返回值来执行此操作

public ResponseEntity<?> checkEmailUnique(@RequestBody String username){
    AppUser app = userRepo.findByUsername(username);
    if(null != app) {
        return ResponseEntity.badRequest().build(); // Will return a 400 response
    }
    return ResponseEntity.ok().build(); // Will return a 200 response
}

根据响应类型,您可以直接确定电子邮件是否存在,而不是在这种情况下返回json。