У меня есть объект, который инкапсулирует второй объект.Например:
@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, но я не знаю что.