Как я могу избежать указателей Джексона JSON для инкапсулированного объекта? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть объект, который инкапсулирует второй объект.Например:

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@fooId")
@Entity(name = "Foo")
@Table(name = "Foo")
@JsonIgnoreProperties(ignoreUnknown = true)
class Foo {
     @Column(name = "too")
     private String too;

     @Column(name = "baz")
     private String baz;

     @ManyToOne(cascade = CascadeType.REFRESH)
     @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false, foreignKey = @ForeignKey(name = "fk_bar")
     private Bar newBar;

     /// blahblah -- setters and getters and constructors
}

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@newBarId")
@Entity(name = "Bar")
@Table(name = "Bar")
@JsonIgnoreProperties(ignoreUnknown = true)
class Bar {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private long Id;  //database generated ID

    @Column(name = "barString")
    private String barString;  //string

     /// blahblah -- setters and getters and constructors
}

Когда я использую REST, я делаю следующее:

@RequestMapping(path="test/{id}", method = RequestMethod.GET, produces = "application/json")
public String getById(@PathVariable("id") Long id) throws Exception {
    List<Foo> myList = dao.findById(id);
    String rtn = objectMapper.writeValueAsString(myList);

    return rtn;
}

Когда я получаю большой список, каждый раз, когда появляется Foo с дублирующейся строкой-это просто опускает указатель, который сбрасывает мой Javascript с внешнего интерфейса.

Есть ли способ заставить Джексона перестать давать мне указатели на инкапсулированные объекты и каждый раз давать мне объект?

Заранее спасибо.

ETA: Я на другом компьютере, но получится что-то вроде этого:

[
 {"@fooId" : 2, "too" : "basdf", "baz" : "asdf", "newBar" : { "@newBarId": 1, "id": 123, "barString" : "barString},
 {"@fooId": 3, "too" : "basafdsdf", "baz" : "asasdfdf", "newBar" : 1}
]

Где второй newBar больше не является объектом,но указатель на предыдущий.Надеюсь, это проясняет ситуацию.

Я уже просмотрел Hibernate и мои результаты поиска - они возвращаются с объектом Bar каждый раз.Итак ... это что-то с ObjectMapper, но я не знаю что.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...