java - 收到的 JSON 与使用 Spring Rest 和 Hibernate 发送的 JSON 不同
问题描述
我在使用 Spring Rest & Hibernate 时遇到了困难。我正在从我的 Android 应用程序进行 API 调用,其中一个 POST 调用似乎有问题。
我有 2 节课:Player
和Game
@Entity
@Table(name = "Game", schema = "statistics")
public class GameEntity {
private int matchId;
private int firstPlayer;
private int secondPlayer;
@Column(name = "first_player")
public int getFirstPlayer() {
return firstPlayer;
}
public void setFirstPlayer(int firstPlayer) {
this.firstPlayer = firstPlayer;
}
@Column(name = "second_player")
public int getSecondPlayer() {
return secondPlayer;
}
public void setSecondPlayer(int secondPlayer) {
this.secondPlayer = secondPlayer;
}
}
@Entity
@Table(name = "Players", schema = "statistics")
public class PlayersEntity {
private int playerId;
private String name;
@Id
@Column(name = "player_id")
public int getPlayerId() {
return playerId;
}
public void setPlayerId(int id) {
this.playerId = id;
}
@Basic
@Column(name = "name")
public String getName() {
return name;
}Ga
public void setName(String name) {
this.name = name;
}
}
当我为 : 发送 POST 时,Player
它可以工作。但是,当我对它执行相同操作时,Game
它会拒绝它,因为它没有正确接收值 - 当我调试时,@RequestBody
我发现收到的实体包含不正确的值(所有字段都是整数,所以都是 0):
即使发送的 JSON 具有正确的值:
最后我得到一个 SQL 错误(因为 3 个 id 中Game
有 2 个是外键引用Player
)。
我真的不明白为什么,也不知道如何在 Spring 上记录 HTTP 请求/响应。
无论如何,提前感谢任何能指导我做出正确反应并保持安全的人。
解决方案
事情是:
在您的实体中,该字段称为“firstPlayer”,而在您的 JSON 中,该字段称为“first_player”。
请注意,您在字段上添加的 @Column 注释仅对存储到数据库表中有效,不适用于后端和前端之间的 JSON 转换。
为此,我可能会构建一个自定义 DTO/VO,而不是重用您的 @Entity,并使用适当的杰克逊映射注释:@JsonProperty。
@JsonProperty("player_id")
private int playerId;
推荐阅读
- typescript - 从基类静态成员访问子类静态成员
- reactjs - 反应从父组件到子组件的本机不透明度
- mysql - MySQL 创建一个自循环的存储过程
- curl - Clarion 6.3 + libcurl 不起作用
- javascript - 如何使用动画定期在两个 html div 之间切换
- ruby-on-rails - 如何使用 ruby 格式化对象数组?
- python - 如何为 GridSearchCV 提供交叉验证的索引列表?
- jquery - Jquery div 固定到其他 div
- python - 绘图未在 python 中显示
- xsl-fo - Apache FOP 中的页面边框