【发布时间】:2021-07-15 09:16:34
【问题描述】:
所以我有一个简单的带有 angular 的 spring jpa rest 应用程序。我在 heroku 中部署的 api 具有类似这样的结构:
[{"id":1,"name":"jose","surname":"garcia","dni":"","address":"","mail":"eve.holt@ reqres.in","phone":"650264663","linkedln":"ojskdfofwa","state":"","rating":"","availability":"","tags":[{"id ":1,"name":"php"},{"id":1,"name":"php"}
所以 id 喜欢允许用户在用户标签字段中添加标签。我为此使用了一个 PUT 请求,它在 req 正文中发送整个用户形式,并添加了新闻标签。
这就是我使用反应形式获取新标签并推送给专家的方式:
expertdetail.ts:
constructor( private formBuilder: FormBuilder,private router: Router, private expertService: ExpertsService) {this.expert= this.router?.getCurrentNavigation().extras.state.expert;
}
ngOnInit(): void {
this.formGroup = this.formBuilder.group({
tags: this.formBuilder.array([])
});
}
get tagsArray(): FormArray{
return this.formGroup.get('tags') as FormArray
}
addTag() {
const tags = this.formBuilder.group(
{
name: ['', Validators.compose([Validators.required, Validators.minLength(2), Validators.maxLength(2)])]
}
);
this.tagsArray.push(tags);
this.expert.tags.push(this.formGroup.value)
this.expertService.updateExpert(this.expert).subscribe((response) => {
if(response){
alert('etiqueta añadida con exito');
}else{
alert('Error: No Token Received');
}
}
)}
专家的console.log好像没问题,红色是用户已经拥有的标签。我尝试插入的蓝色:
我在专家服务中的更新方法:
updateExpert(expert){
return this.http.put('https://serene-wave-12377.herokuapp.com/api/experts', expert);
调用返回一个 OK 响应,但是当我转到我的 API 时,我看到了:
[{"id":1,"name":"jose","surname":"garcia","dni":"","address":"","mail":"eve.holt@ reqres.in","phone":"650264663","linkedln":"","state":"","rating":"","availability":"","tags":[{"id" :1,"name":"php"},{"id":1,"name":"php"},{"id":1,"name":"php"},{"id":1 ,"name":"php"},{"id":2,"name":"c++"},{"id":2,"name":"c++"},{"id":2," name":"c++"},{"id":2,"name":"c++"},{"id":3,"name":null},{"id":4,"name":null },{"id":5,"name":null},{"id":6,"name":null},{"id":7,"name":null},{"id":8 ,"名称":null}]}]
好像是在添加标签,生成更多的IDS,但是name是空的。
在我的 Spring JPA 中,我这样更新:
public Expert updateExpert(Expert expert) {
Expert updatedExpert = manager.find(Expert.class, expert.getId());
updatedExpert.setName(expert.getName());
updatedExpert.setMail(expert.getMail());
updatedExpert.setSurname(expert.getSurname());
updatedExpert.setPhone(expert.getPhone());
updatedExpert.setAvailability(expert.getAvailability());
updatedExpert.setAddress(expert.getAddress());
updatedExpert.setDni(expert.getDni());
updatedExpert.setLinkedln(expert.getLinkedln());
updatedExpert.setRating(expert.getRating());
updatedExpert.setState(expert.getState());
updatedExpert.getTags().addAll(expert.getTags());
manager.merge(updatedExpert);
return updatedExpert;
}
}
有人知道吗?我尝试了更多组合,但似乎没有任何效果。我已经尝试过使用 Postman,它也总是插入空值。专家和标签是多对多的关系。
【问题讨论】:
-
请分享您的专家和标签课程。这可能是因为模型不合适
标签: javascript angular spring api postman