Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript http在PUT请求中发送空值(Angular+;spring jpa应用程序)_Javascript_Angular_Spring_Api_Postman - Fatal编程技术网

Javascript http在PUT请求中发送空值(Angular+;spring jpa应用程序)

Javascript http在PUT请求中发送空值(Angular+;spring jpa应用程序),javascript,angular,spring,api,postman,Javascript,Angular,Spring,Api,Postman,因此,我有一个简单的spring jpa rest应用程序。部署在heroku中的api的结构与此类似: public Expert updateExpert(Expert expert) { Expert updatedExpert = manager.find(Expert.class, expert.getId()); updatedExpert.setName(expert.getName()); updatedExpert.set

因此,我有一个简单的spring jpa rest应用程序。部署在heroku中的api的结构与此类似:

    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;
    }
}
[{“id”:1,“姓名”:“jose”,“姓氏”:“garcia”,“dni”:“地址”:“邮件”:“eve”。holt@reqres.in“,”电话“:”650264663“,”linkedln“:”OJSKDOFWA“,”状态“:”评级“:”可用性“:”标签“:[{“id”:1,“名称”:“php”},{“id”:1,“名称”:“php”}”

所以我想允许用户在用户标签字段中添加标签。我使用一个PUT请求,在req正文中发送整个形式的用户,并添加新闻标签

这就是我如何使用reactiveform获取新标签并推送给专家的方式:

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');
      }
     }


     )}
@Entity
@Table(name="experts")
public class Expert {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String surname;
    private String dni;
    private String address;
    private String mail;
    private String phone;
    private String linkedln;
    private String state;
    private String rating;
    private String availability;



    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST})
    @JoinTable(
            name = "experts_tags",
            joinColumns = {@JoinColumn(name="tags_id", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name="experts_id", referencedColumnName = "id")}
    )
    private List<Tag> tags = new ArrayList<>();


    public Expert() {
    }

    public Expert(String name, String surname, String dni, String address, String mail, String phone, String linkedln, String state, String rating, List<Tag> tags, String availability) {
        this.name = name;
        this.surname = surname;
        this.dni = dni;
        this.address = address;
        this.mail = mail;
        this.phone = phone;
        this.linkedln = linkedln;
        this.state = state;
        this.rating = rating;
        this.tags = tags;
        this.availability = availability;
    } //getters and setters
@Entity
@Table(name="tags")
public class Tag {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @ManyToMany(mappedBy="tags")
    private List<Expert> experts = new ArrayList<>();

    public Tag() {
    }  //getters and setters
expert的console.log看起来不错,红色是用户已经拥有的标签。蓝色是我尝试插入的内容:

我在专家服务中更新的方法:

 updateExpert(expert){
    return this.http.put('https://serene-wave-12377.herokuapp.com/api/experts', expert);
调用返回OK响应,但当我转到API时,我看到:

[{“id”:1,“姓名”:“jose”,“姓氏”:“garcia”,“dni”:“地址”:“邮件”:“eve”。holt@reqres.in“,”电话“:”650264663“,”linkedln“:”状态“:”评级“:”可用性“:”标签“:[{”id“:1,“名称“:”php“},{”id“:1,“名称“:”php“},{”id“:1,“名称“:”php“},{”id“:2,“名称“:”c++“},{”id“:”2,“名称“:”c++”},{”id“:”2,“名称“:”c++”},{“c++”},{“id”:3,“名称”:null},{“id”:4,“名称”:null},{“id”:5,“名称”:null},{“id”:6,“名称”:null},{“id”:7,“名称”:null},{“id”:8,“名称”:null}]

它似乎在添加标记并生成更多ID,但名称为空

在我的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,它也总是插入空值。专家和标记有多对多关系。

这是我的专家和标记模型。除了标记字段,所有字段都插入正常

专家模型:

  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');
      }
     }


     )}
@Entity
@Table(name="experts")
public class Expert {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String surname;
    private String dni;
    private String address;
    private String mail;
    private String phone;
    private String linkedln;
    private String state;
    private String rating;
    private String availability;



    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST})
    @JoinTable(
            name = "experts_tags",
            joinColumns = {@JoinColumn(name="tags_id", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name="experts_id", referencedColumnName = "id")}
    )
    private List<Tag> tags = new ArrayList<>();


    public Expert() {
    }

    public Expert(String name, String surname, String dni, String address, String mail, String phone, String linkedln, String state, String rating, List<Tag> tags, String availability) {
        this.name = name;
        this.surname = surname;
        this.dni = dni;
        this.address = address;
        this.mail = mail;
        this.phone = phone;
        this.linkedln = linkedln;
        this.state = state;
        this.rating = rating;
        this.tags = tags;
        this.availability = availability;
    } //getters and setters
@Entity
@Table(name="tags")
public class Tag {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @ManyToMany(mappedBy="tags")
    private List<Expert> experts = new ArrayList<>();

    public Tag() {
    }  //getters and setters
@实体
@表(name=“专家”)
公开课专家{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
私有字符串名称;
私家姓;
私有字符串dni;
私有字符串地址;
私人字符串邮件;
私人电话;
私有字符串链接;
私有字符串状态;
私人字符串评级;
私有字符串可用性;
@ManyToMany(fetch=FetchType.EAGER,cascade={CascadeType.PERSIST})
@可接合(
name=“专家标签”,
joinColumns={@JoinColumn(name=“tags\u id”,referencedColumnName=“id”)},
inverseJoinColumns={@JoinColumn(name=“experts\u id”,referencedColumnName=“id”)}
)
private List tags=new ArrayList();
公共专家(){
}
公共专家(字符串名称、字符串姓氏、字符串dni、字符串地址、字符串邮件、字符串电话、字符串链接DN、字符串状态、字符串评级、列表标签、字符串可用性){
this.name=名称;
this.姓氏=姓氏;
this.dni=dni;
this.address=地址;
this.mail=邮件;
this.phone=电话;
this.linkedln=linkedln;
this.state=状态;
这个。评级=评级;
this.tags=标签;
这个。可用性=可用性;
}//getter和setter
标签型号:

  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');
      }
     }


     )}
@Entity
@Table(name="experts")
public class Expert {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String surname;
    private String dni;
    private String address;
    private String mail;
    private String phone;
    private String linkedln;
    private String state;
    private String rating;
    private String availability;



    @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST})
    @JoinTable(
            name = "experts_tags",
            joinColumns = {@JoinColumn(name="tags_id", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name="experts_id", referencedColumnName = "id")}
    )
    private List<Tag> tags = new ArrayList<>();


    public Expert() {
    }

    public Expert(String name, String surname, String dni, String address, String mail, String phone, String linkedln, String state, String rating, List<Tag> tags, String availability) {
        this.name = name;
        this.surname = surname;
        this.dni = dni;
        this.address = address;
        this.mail = mail;
        this.phone = phone;
        this.linkedln = linkedln;
        this.state = state;
        this.rating = rating;
        this.tags = tags;
        this.availability = availability;
    } //getters and setters
@Entity
@Table(name="tags")
public class Tag {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @ManyToMany(mappedBy="tags")
    private List<Expert> experts = new ArrayList<>();

    public Tag() {
    }  //getters and setters
@实体
@表(name=“tags”)
公共类标签{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
私有字符串名称;
@多个(mappedBy=“标记”)
私有列表专家=新的ArrayList();
公共标签(){
}//getter和setter

请共享您的专家和标记类。这可能是因为模型不正确