2
respostas

Referencia circular gera stackoverflow

Olá, o objeto que estou tentando transformar em json está dando um stackoverflow devido uma referencia circular. Pesquisei e não encontrei solução deste problema com o API GSON. Apenas com a Jackson. Como faço para resolver este erro e continuar utilizando o GSON para o treinamento? Obrigado.

Servlet

@Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

EmpresaDAO empresa = new EmpresaDAO();

List empresas = empresa.getEmpresas();

Gson gson = new Gson();

String json = gson.toJson(empresas);

resp.setContentType("application/json");

resp.getWriter().print(json);

}

Classe Empresa

@Entity @Table(name="tb_empresa") @Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Empresa{ @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; private String nome; @Temporal(TemporalType.DATE) private Date dataAbertura; @ManyToOne(fetch=FetchType.EAGER)

Referencia Circular

private Banco banco;

...

Classe Banco

@Entity @Table(name="tb_banco") @Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Banco { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; private String nome; @OneToMany (mappedBy="banco") @JsonIgnore

Referencia Circular

private List empresa;

...

Erro apresentado

HTTP ERROR 500

Problem accessing /empresas. Reason:

Server Error

Caused by:

java.lang.StackOverflowError at java.text.DateFormatSymbols.getProviderInstance(DateFormatSymbols.java:362) at java.text.DateFormatSymbols.getInstance(DateFormatSymbols.java:340) at java.util.Calendar.getDisplayName(Calendar.java:2110) at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1125) at java.text.SimpleDateFormat.format(SimpleDateFormat.java:966) at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936) at java.text.DateFormat.format(DateFormat.java:345)

2 respostas

Fala Leo, tudo bem?

Eu tive um problema parecido esses dias, o problema foi com o Gson, ele não consegue converter o beans do Spring em Json. Eu troquei pelo Jackson e resolveu.

http://tutorials.jenkov.com/java-json/jackson-installation.html

Olá Leonardo!

Conseguiu resolver sua dúvida?