java - 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);
}
有人知道发生了什么吗?感谢任何帮助
解决方案
推荐阅读
- c - 将单个字符指针传递给C中的函数
- php - Search.php 无法在找到项目时显示空白页面
- python - 在重定向页面上显示上次上传的文件详细信息 - Django
- speech-recognition - 如何从 microsoft-cognitive 中的单个音频文件中识别多个扬声器
- firebase - Flutter Profile Matching App - Cloud Firestore 数据建模 | 如何查询以避免对已经刷过的 UID 进行不必要的读取
- python - QWidget 在布局分配时变得不可见
- javascript - 根据js确认执行按钮onclick动作
- javascript - 如何使用url将base64中的PDF保存在数据库中?
- javascript - Javascript:对产品选项组合的平面数组进行分组和嵌套
- typescript - Typescript VueJs Webpack 在 Firefox 调试器中与我的组件混淆