Java 从spring引导rest控制器返回JSON对象
我试图检查用户名在spring boot中是否唯一。 我想将结果作为JSON对象发送。 这是REST控制器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!
@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。