首页 > 解决方案 > 收到的 JSON 与使用 Spring Rest 和 Hibernate 发送的 JSON 不同

问题描述

我在使用 Spring Rest & Hibernate 时遇到了困难。我正在从我的 Android 应用程序进行 API 调用,其中一个 POST 调用似乎有问题。

我有 2 节课:PlayerGame

@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 值

即使发送的 JSON 具有正确的值:

正确的 JSON

最后我得到一个 SQL 错误(因为 3 个 id 中Game有 2 个是外键引用Player)。

我真的不明白为什么,也不知道如何在 Spring 上记录 HTTP 请求/响应。

无论如何,提前感谢任何能指导我做出正确反应并保持安全的人。

标签: javajsonspringhibernatespring-rest

解决方案


事情是:

在您的实体中,该字段称为“firstPlayer”,而在您的 JSON 中,该字段称为“first_player”。

请注意,您在字段上添加的 @Column 注释仅对存储到数据库表中有效,不适用于后端和前端之间的 JSON 转换。

为此,我可能会构建一个自定义 DTO/VO,而不是重用您的 @Entity,并使用适当的杰克逊映射注释:@JsonProperty。

@JsonProperty("player_id")
private int playerId;

推荐阅读