Java 从spring引导rest控制器返回JSON对象

Java 从spring引导rest控制器返回JSON对象,java,spring,spring-data,angular5,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!

我试图检查用户名在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;
    }

如果您使用的是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;        
}

已编辑添加了更多示例。

Rest方法的返回类型为字符串。您可以使用用户定义的对象来代替任何字符串,其中(在其中)放置布尔变量,例如status,您可以发送用户名是否存在。根据来自静止侧的响应,您可以向角度方向前进。

您也可以使用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
}
public ResponseEntity checkEmailUnique(@RequestBody String username){
AppUser app=userRepo.findByUsername(用户名);
如果(空!=应用程序){
return ResponseEntity.badRequest().build();//将返回400响应
}
return ResponseEntity.ok().build();//将返回一个200响应
}

根据响应类型,您可以直接确定电子邮件是否存在,而不是在本例中返回json。

只需返回“{emailnottake:true}”和“{emailnottake:false}”我尝试了这个方法,但我不知道如何在angular5端获取它,如果您能再次看到它,我已经添加了代码:)谢谢您的回答,我做的和你的回答一样,我怎么能在最后得到这个角度5的值?没有“得到角度”。前端(在您的示例中是angular)应用程序将向checkEmailUnique URL发送HTTP请求,响应将包含由checkEmailUnique方法创建的JSON。