首页 > 解决方案 > spring boot rest-api PUT 请求返回空值

问题描述

我正在构建一个 spring jpa rest 应用程序,并且 id 喜欢允许用户通过在具有专家的数组字段中插入更多标签来更新我的专家模型。我在专家和标签之间建立了多对多的关系。

我注意到总是与邮递员一起做一个请愿书来更新专家,在标签名称中返回空值,尽管标签被插入并且 id 是好的。我在 heroku 中部署的专家 api 示例(空值是我插入的新标签):

[{"id":4,"name":"jose","surname":"garcia","dni":"","address":"","mail":"eve.holt@reqres.in ","phone":"650264663","linkedln":"","state":"","rating":"","availability":"","tags":[{"id":43, "name":"php"},{"id":44,"name":"c++"},{"id":46,"name":null},{"id":47,"name":空},{"id":58,"name":null},{"id":59,"name":null},{"id":60,"name":null},{"id": 61,"name":null},{"id":62,"name":null}]}]

这是我的模型专家:

@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<>(); //getters and setters

我使用 entitymanager 从expertDAO 更新专家的方法:

 @Override
    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.setTags(expert.getTags());
      manager.merge(updatedExpert);
      return updatedExpert;
    }

我处理 PUT 请求的控制器方法:

 @PutMapping("/experts")
    public ResponseEntity<Expert> updateExpert(@RequestBody Expert expert){
        log.debug("REST request to update a expert{}", expert);
        if (expert.getId() == null) {
            log.warn("updating expert without id");
            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
        }
        Expert expertDB = expertService.updateExpert(expert);
        return ResponseEntity.ok().body(expertDB);
    }

有人知道发生了什么吗?感谢任何帮助

标签: javaspring-bootapirest

解决方案


我尝试以不同的方式插入标签,如下所示:

在此处输入图像描述

或这个:

在此处输入图像描述

总是返回空值,但响应正常。


推荐阅读