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") @JsonIgnoreReferencia Circular
private List empresa;...
Erro apresentado
HTTP ERROR 500Problem 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)