Java 将Spring JPA一对多对象编组为JSON

Java 将Spring JPA一对多对象编组为JSON,java,json,spring,hibernate,jackson,Java,Json,Spring,Hibernate,Jackson,我试图将3个JPA对象封送到JSON字符串中。 游戏对象持有一个玩家列表,每个玩家持有一个帧列表。JPA部分似乎运行良好。但是,JSON输出是空的 Game.java package com.bowling.bowlingapp.game; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonManagedReference; import javax.p

我试图将3个JPA对象封送到JSON字符串中。 游戏对象持有一个玩家列表,每个玩家持有一个帧列表。JPA部分似乎运行良好。但是,JSON输出是空的

Game.java

package com.bowling.bowlingapp.game;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

/**
 * A single bowling game
 *
 */
@Entity
@Table( name = "games")
public class Game {

     @Id @GeneratedValue
     @JsonIgnore
     private Long id;

     @OneToMany(cascade = CascadeType.ALL,
             fetch = FetchType.LAZY,
             mappedBy = "game")
     @JsonManagedReference
     List<Player> players;

     public List<Player> getPlayers() {
          return players;
     }

     public void setPlayers(List<Player> players) {
          this.players = players;
     }

     public void addPlayer(Player player) {
          if (this.players == null) {
               players = new ArrayList<>();
          }
          this.players = players;
     }
}

我正试图用以下代码实现它:

public String makeGame() {

        Player bob = new Player("Bob");
        Player joe = new Player("Joe");
        Frame frameOne = new Frame();
        frameOne.setScore(12);
        Frame frameTwo = new Frame();
        frameTwo.setScore(15);
        List<Frame> frames = new ArrayList<>();
        bob.setFrames(frames);
        joe.setFrames(frames);

        List<Player> players = new ArrayList<>();
        players.add(bob);
        players.add(joe);
        Game game = new Game();
        game.setPlayers(players);

        ObjectMapper mapper = new JsonMapper();
        String result = "temp";
        try {
            result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(game);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        return result;

    }
正如你所看到的,它是空的。我做错了什么

编辑:现在我为每个私有属性添加了getter和setter,输出如下所示:

{
"players" : [
    { 
      "frames" : [ ] 
    }, 
    { "frames" : [ ] 
    } 
    ]
}
{
"players" : [ {
"name" : "Bob",
"frames" : [ ]
}, {
"name" : "Joe",
"frames" : [ ]
} ]

编辑:我忘了添加
frames.add(frameOne);框架。添加(框架二)到我的生成器代码。现在它起作用了。谢谢大家!

场景后面的对象映射器使用所有属性的getter方法。
请在所有3个类中声明getter方法。

现在输出具有播放器名称,但帧仍然是空列表。我为播放器对象创建帧列表的代码不完整。获得者是问题所在。非常感谢。上面缺少2行代码。frames.add(frameOne);框架。添加(框架二);
{
"players" : [
    { 
      "frames" : [ ] 
    }, 
    { "frames" : [ ] 
    } 
    ]
}
{
"players" : [ {
"name" : "Bob",
"frames" : [ ]
}, {
"name" : "Joe",
"frames" : [ ]
} ]