Я делаю спокойное приложение и пытаюсь преобразовать список объектов в json для определенного URL-адреса (@RequestMapping / @ResponseBody)
У меня есть jackson-hibernate4 и jackson-core, databind и т. д. в моем пути к классам.
Вот мой объект, который я хочу преобразовать в json.
@Entity
@Table(name="Product")
public class Product {
@Id
@Column(name="productId")
@GeneratedValue
protected int productId;
@Column(name="Product_Name")
protected String name;
@Column(name="price")
protected BigDecimal baseprice;
@OneToMany(cascade = javax.persistence.CascadeType.ALL,mappedBy="product",fetch=FetchType.EAGER)
protected List<ProductOption> productoption = new ArrayList<ProductOption>();
@OneToMany(cascade = javax.persistence.CascadeType.ALL,mappedBy="product",fetch=FetchType.EAGER)
protected List<ProductSubOption> productSubOption = new ArrayList<ProductSubOption>();
@ManyToOne
@JoinColumn(name="ofVendor")
protected Vendor vendor;
Два объекта внутри Product также являются POJO'S.
Вот мой метод, который извлекает список продуктов
@Override
public List<Product> getMenuForVendor(int vendorId) {
List<Product> result = em.createQuery("from "+Product.class.getName()+" where ofVendor = :vendorId").setParameter("vendorId", vendorId).getResultList();
System.out.println(result.size());
return result;
}
Когда я пытаюсь вернуть этот список в свой контроллер, я получаю сообщение «Не удается лениво загрузить для json», поэтому я настраиваю свои объекты на жадную загрузку. Вот мой контроллер
@Autowired
private MenuDaoImpl ms;
@RequestMapping(value = "/{vendorId}", method = RequestMethod.GET)
public @ResponseBody List<Product> getMenu(@PathVariable int vendorId){
List<Product> Menu = Collections.unmodifiableList(ms.getMenuForVendor(vendorId));
return Menu;
}
Теперь, когда я нажимаю на свой URL-адрес localhost:8080/getMenu/1, я должен отображать строку json, но я получаю большой список ошибок
WARN : org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Handling of [org.springframework.http.converter.HttpMessageNotWritableException] resulted in Exception
java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:467)
Could not write JSON: Infinite recursion (StackOverflowError) (through reference chain:
Я не уверен, что я что-то упускаю. Пожалуйста, направляйте.
Vendor
обратная ссылка наProduct
? - person Sotirios Delimanolis   schedule 05.03.2014Produce
и должен сериализовать егоVendor
. Сериализация егоVendor
означает сериализацию спискаProduct
этогоVendor
. И так далее и так далее, пока не закончится память. - person Sotirios Delimanolis   schedule 05.03.2014@JsonBackReference
или что-то подобное. - person Sotirios Delimanolis   schedule 05.03.2014