Java com.fasterxml.jackson.databind.JsonMappingException:无限递归(StackOverflowerr)
我正在尝试实现rest服务。我已经创建了我的实体和DAO,当使用这个everthyng时效果很好。 但是当我尝试在RESTJSON中公开信息时,就会出现无限递归错误 我读过很多关于这个错误的话题,但对我来说不是很清楚 我很抱歉,我已经尝试了太多的选择,每一个都很难谈论 当我调试代码时,我看到来自dao的数据是正确的,当我尝试使用json时,问题就出现了。当我使用jsf时,页面工作正常 我已尝试在rest方法中使用Gson和返回字符串,但发生stackoverflow错误 下面我发布了我的请求(全部),因为我不知道这个问题。 我正在使用wildfly服务器。。。 提前谢谢 型号的Java com.fasterxml.jackson.databind.JsonMappingException:无限递归(StackOverflowerr),java,json,rest,Java,Json,Rest,我正在尝试实现rest服务。我已经创建了我的实体和DAO,当使用这个everthyng时效果很好。 但是当我尝试在RESTJSON中公开信息时,就会出现无限递归错误 我读过很多关于这个错误的话题,但对我来说不是很清楚 我很抱歉,我已经尝试了太多的选择,每一个都很难谈论 当我调试代码时,我看到来自dao的数据是正确的,当我尝试使用json时,问题就出现了。当我使用jsf时,页面工作正常 我已尝试在rest方法中使用Gson和返回字符串,但发生stackoverflow错误 下面我发布了我的请求(全
@Entity
@Table(name="usertable")
@NamedQuery(name="UserModel.findAll", query="SELECT u FROM UserModel u")
@XmlRootElement
public class UserModel implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false)
private String USId;
@Temporal(TemporalType.DATE)
@Column(nullable=false)
private Date userNascimento;
@Column(nullable=false, length=45)
private String USMail;
@Column(nullable=false, length=150)
private String USName;
@Column(nullable=false, length=45)
private String USNick;
@Column(nullable=false, length=45)
private String USPassword;
//bi-directional many-to-one association to UserAddressModel
@OneToMany(fetch = FetchType.EAGER, mappedBy="usertable")
private List<UserAddressModel> listAddressModel;
//bi-directional many-to-one association to UserFoneModel
@OneToMany(fetch = FetchType.EAGER, mappedBy="usertable")
private List<UserFoneModel> listFoneModel;
public UserModel() {
}
public String getUSId() {
return this.USId;
}
public void setUSId(String USId) {
this.USId = USId;
}
public Date getUserNascimento() {
return this.userNascimento;
}
public void setUserNascimento(Date userNascimento) {
this.userNascimento = userNascimento;
}
public String getUSMail() {
return this.USMail;
}
public void setUSMail(String USMail) {
this.USMail = USMail;
}
public String getUSName() {
return this.USName;
}
public void setUSName(String USName) {
this.USName = USName;
}
public String getUSNick() {
return this.USNick;
}
public void setUSNick(String USNick) {
this.USNick = USNick;
}
public String getUSPassword() {
return this.USPassword;
}
public void setUSPassword(String USPassword) {
this.USPassword = USPassword;
}
public List<UserAddressModel> getUseraddresstables() {
return this.listAddressModel;
}
public void setUseraddresstables(List<UserAddressModel> useraddresstables) {
this.listAddressModel = useraddresstables;
}
public UserAddressModel addUseraddresstable(UserAddressModel useraddresstable) {
getUseraddresstables().add(useraddresstable);
useraddresstable.setUsertable(this);
return useraddresstable;
}
public UserAddressModel removeUseraddresstable(UserAddressModel useraddresstable) {
getUseraddresstables().remove(useraddresstable);
useraddresstable.setUsertable(null);
return useraddresstable;
}
public List<UserFoneModel> getUserfonetables() {
return this.listFoneModel;
}
public void setUserfonetables(List<UserFoneModel> userfonetables) {
this.listFoneModel = userfonetables;
}
public UserFoneModel addUserfonetable(UserFoneModel userfonetable) {
getUserfonetables().add(userfonetable);
userfonetable.setUsertable(this);
return userfonetable;
}
public UserFoneModel removeUserfonetable(UserFoneModel userfonetable) {
getUserfonetables().remove(userfonetable);
userfonetable.setUsertable(null);
return userfonetable;
}
}
@Entity
@Table(name="userfonetable")
@NamedQuery(name="UserFoneModel.findAll", query="SELECT u FROM UserFoneModel u")
public class UserFoneModel implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false)
private String UFId;
@Column(nullable=false)
private short UFDdd;
@Column(nullable=false)
private int UFFone;
//bi-directional many-to-one association to UserModel
@ManyToOne
@JoinColumn(name="UFUserID", nullable=false)
private UserModel usertable;
//bi-directional many-to-one association to OperadorasModel
@ManyToOne
@JoinColumn(name="UFOperadoraID", nullable=false)
private OperadorasModel operadorastable;
//bi-directional many-to-one association to TiposFoneModel
@ManyToOne
@JoinColumn(name="UFTipoTelefone", nullable=false)
private TiposFoneModel tbTipostelefone;
public UserFoneModel() {
}
public String getUFId() {
return this.UFId;
}
public void setUFId(String UFId) {
this.UFId = UFId;
}
public short getUFDdd() {
return this.UFDdd;
}
public void setUFDdd(short UFDdd) {
this.UFDdd = UFDdd;
}
public int getUFFone() {
return this.UFFone;
}
public void setUFFone(int UFFone) {
this.UFFone = UFFone;
}
public UserModel getUsertable() {
return this.usertable;
}
public void setUsertable(UserModel usertable) {
this.usertable = usertable;
}
public OperadorasModel getOperadorastable() {
return this.operadorastable;
}
public void setOperadorastable(OperadorasModel operadorastable) {
this.operadorastable = operadorastable;
}
public TiposFoneModel getTbTipostelefone() {
return this.tbTipostelefone;
}
public void setTbTipostelefone(TiposFoneModel tbTipostelefone) {
this.tbTipostelefone = tbTipostelefone;
}
}
@Entity
@Table(name="useraddresstable")
@NamedQuery(name="UserAddressModel.findAll", query="SELECT u FROM UserAddressModel u")
public class UserAddressModel implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false)
private String UAId;
@Column(nullable=false, length=100)
private String UABairro;
@Column(nullable=false, length=100)
private String UACidade;
@Column(length=45)
private String UAComplemento;
@Column(nullable=false, length=2)
private String UAEstado;
@Column(nullable=false)
private int UANumero;
@Column(length=100)
private String UARua;
//bi-directional many-to-one association to UserModel
@ManyToOne
@JoinColumn(name="UAUserID", nullable=false)
private UserModel usertable;
public UserAddressModel() {
}
public String getUAId() {
return this.UAId;
}
public void setUAId(String UAId) {
this.UAId = UAId;
}
public String getUABairro() {
return this.UABairro;
}
public void setUABairro(String UABairro) {
this.UABairro = UABairro;
}
public String getUACidade() {
return this.UACidade;
}
public void setUACidade(String UACidade) {
this.UACidade = UACidade;
}
public String getUAComplemento() {
return this.UAComplemento;
}
public void setUAComplemento(String UAComplemento) {
this.UAComplemento = UAComplemento;
}
public String getUAEstado() {
return this.UAEstado;
}
public void setUAEstado(String UAEstado) {
this.UAEstado = UAEstado;
}
public int getUANumero() {
return this.UANumero;
}
public void setUANumero(int UANumero) {
this.UANumero = UANumero;
}
public String getUARua() {
return this.UARua;
}
public void setUARua(String UARua) {
this.UARua = UARua;
}
public UserModel getUsertable() {
return this.usertable;
}
public void setUsertable(UserModel usertable) {
this.usertable = usertable;
}
}
@Entity
@Table(name="tb_tipostelefone")
@NamedQuery(name="TiposFoneModel.findAll", query="SELECT t FROM TiposFoneModel t")
public class TiposFoneModel implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false)
private short TFId;
@Column(nullable=false, length=45)
private String TFDescricao;
//bi-directional many-to-one association to UserFoneModel
@OneToMany(fetch = FetchType.EAGER, mappedBy="tbTipostelefone")
private List<UserFoneModel> listFoneModel;
public TiposFoneModel() {
}
public short getTFId() {
return this.TFId;
}
public void setTFId(short TFId) {
this.TFId = TFId;
}
public String getTFDescricao() {
return this.TFDescricao;
}
public void setTFDescricao(String TFDescricao) {
this.TFDescricao = TFDescricao;
}
public List<UserFoneModel> getUserfonetables() {
return this.listFoneModel;
}
public void setUserfonetables(List<UserFoneModel> userfonetables) {
this.listFoneModel = userfonetables;
}
public UserFoneModel addUserfonetable(UserFoneModel userfonetable) {
getUserfonetables().add(userfonetable);
userfonetable.setTbTipostelefone(this);
return userfonetable;
}
public UserFoneModel removeUserfonetable(UserFoneModel userfonetable) {
getUserfonetables().remove(userfonetable);
userfonetable.setTbTipostelefone(null);
return userfonetable;
}
}
@Entity
@Table(name="operadorastable")
@NamedQuery(name="OperadorasModel.findAll", query="SELECT o FROM OperadorasModel o")
public class OperadorasModel implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true, nullable=false)
private short OPCodigo;
@Column(nullable=false, length=100)
private String opNome;
//bi-directional many-to-one association to UserFoneModel
@OneToMany(fetch = FetchType.EAGER, mappedBy="operadorastable")
private List<UserFoneModel> listFoneModel;
public OperadorasModel() {
}
public short getOPCodigo() {
return this.OPCodigo;
}
public void setOPCodigo(short OPCodigo) {
this.OPCodigo = OPCodigo;
}
public String getOpNome() {
return this.opNome;
}
public void setOpNome(String opNome) {
this.opNome = opNome;
}
public List<UserFoneModel> getUserfonetables() {
return this.listFoneModel;
}
public void setUserfonetables(List<UserFoneModel> userfonetables) {
this.listFoneModel = userfonetables;
}
public UserFoneModel addUserfonetable(UserFoneModel userfonetable) {
getUserfonetables().add(userfonetable);
userfonetable.setOperadorastable(this);
return userfonetable;
}
public UserFoneModel removeUserfonetable(UserFoneModel userfonetable) {
getUserfonetables().remove(userfonetable);
userfonetable.setOperadorastable(null);
return userfonetable;
}
}
@实体
@表(name=“usertable”)
@NamedQuery(name=“UserModel.findAll”,query=“从UserModel u中选择u”)
@XmlRootElement
公共类UserModel实现了可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(unique=true,nullable=false)
私人字符串USId;
@时态(TemporalType.DATE)
@列(nullable=false)
私人约会用户Nascimento;
@列(nullable=false,长度=45)
专用字符串USMail;
@列(nullable=false,长度=150)
私有字符串USName;
@列(nullable=false,长度=45)
私有字符串USNick;
@列(nullable=false,长度=45)
私有字符串USPassword;
//与UserAddressModel的双向多对一关联
@OneToMany(fetch=FetchType.EAGER,mappedBy=“usertable”)
私有列表模型;
//与UserFoneModel的双向多对一关联
@OneToMany(fetch=FetchType.EAGER,mappedBy=“usertable”)
私有列表listFoneModel;
公共用户模型(){
}
公共字符串getUSId(){
返回此.USId;
}
公共void setUSId(字符串USId){
this.USId=USId;
}
公共日期getUserNascimento(){
返回this.userNascimento;
}
公共无效setUserNascimento(日期userNascimento){
this.userNascimento=userNascimento;
}
公共字符串getUSMail(){
返回此.USMail;
}
public void setUSMail(字符串USMail){
this.USMail=USMail;
}
公共字符串getUSName(){
返回此.USName;
}
公共void setUSName(字符串USName){
this.USName=USName;
}
公共字符串getUSNick(){
返回此.USNick;
}
公共void setUSNick(字符串USNick){
this.USNick=USNick;
}
公共字符串getUSPassword(){
返回此.USPassword;
}
public void setUSPassword(字符串USPassword){
this.USPassword=USPassword;
}
公共列表getUseraddresstables(){
返回此.listAddressModel;
}
public void setUseraddresstables(列出useraddresstables){
this.listAddressModel=useraddresstables;
}
公共UserAddressModel addUseraddresstable(UserAddressModel useraddresstable){
getUseraddresstables().add(useraddresstable);
useraddresstable.setUsertable(此);
返回useraddresstable;
}
公共UserAddressModel removeUseraddresstable(UserAddressModel useraddresstable){
getUseraddresstables().remove(useraddresstable);
useraddresstable.setUsertable(空);
返回useraddresstable;
}
公共列表getUserfonetables(){
返回此.listFoneModel;
}
公共void setUserfonetables(列出userfonetables){
this.listFoneModel=userfonetables;
}
公共UserFoneModel addUserfonetable(UserFoneModel userfonetable){
getUserFonetTables().add(userFonetTable);
setUsertable(这个);
返回userfonetable;
}
public UserFoneModel removeUserfonetable(UserFoneModel userfonetable){
getUserFonetTables().remove(userFonetTable);
setUsertable(空);
返回userfonetable;
}
}
@实体
@表(name=“userfonetable”)
@NamedQuery(name=“UserFoneModel.findAll”,query=“从UserFoneModel u中选择u”)
公共类UserFoneModel实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(unique=true,nullable=false)
私有字符串UFId;
@列(nullable=false)
私人短UFDdd;
@列(nullable=false)
乌夫丰私人酒店;
//与UserModel的双向多对一关联
@许多酮
@JoinColumn(name=“UFUserID”,nullable=false)
私有用户模型用户表;
//OperadorasModel的双向多对一关联
@许多酮
@JoinColumn(name=“UFOperadoraID”,null=false)
私人歌剧院模型歌剧院;
//TiposFoneModel的双向多对一关联
@许多酮
@JoinColumn(name=“UFTipoTelefone”,nullable=false)
私人TiposFoneModel tbTipostelefone;
public UserFoneModel(){
}
公共字符串getUFId(){
返回此.UFId;
}
公共void setUFId(字符串UFId){
this.UFId=UFId;
}
公共短消息getUFDdd(){
返回此.UFDdd;
}
公共无效设置UFDdd(简称UFDdd){
this.UFDdd=UFDdd;
}
public int getUFFone(){
退回这个.UFFone;
}
公共空间设置为空(内部为空){
this.UFFone=UFFone;
}
公共用户模型getUsertable(){
返回this.usertable;
}
公共void setUsertable(UserModel usertable){
this.usertable=usertable;
}
公共OperadorModel getOperadorastable(){
返回此文件。可操作性;
}
公共无效设置operadorastable(OperadorasModel operadorastable){
this.operadorastable=operadorastable;
}
公共TiposFoneModel gettbtipstelefone(){
返回此.tbTipostelefone;
}
公共v
@Stateless
@LocalBean
public class UserDao {
/**
* Default constructor.
*/
@PersistenceContext
EntityManager em;
public UserDao() {
// TODO Auto-generated constructor stub
}
public List<UserModel> listAll()
{
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<UserModel> cq = cb.createQuery(UserModel.class);
Root<UserModel> rootEntry = cq.from(UserModel.class);
CriteriaQuery<UserModel> all = cq.select(rootEntry);
TypedQuery<UserModel> allQuery = em.createQuery(all);
List<UserModel> listU = allQuery.getResultList();
return listU;
/*
Query query = em.createQuery("SELECT u FROM UserModel u");
return query.getResultList();
*/
}
}
import java.util.List;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import br.com.avera.dao.UserDao;
import br.com.avera.model.UserAddressModel;
import br.com.avera.model.UserFoneModel;
import br.com.avera.model.UserModel;
@Path("/users")
public class UserRest {
@Inject
UserDao userDao;
@GET
@Produces(MediaType.APPLICATION_JSON)
public UserModel getUser()
{
List<UserModel> userModelList = userDao.listAll();
UserModel userModel = userModelList.get(0);
List<UserFoneModel> lFone = userModel.getUserfonetables();
for (UserFoneModel userFoneModel : lFone) {
System.out.println(userFoneModel.getUFDdd());
System.out.println(userFoneModel.getUFFone());
}
System.out.println("OOOOOO");
List<UserAddressModel> lAddressModels = userModel.getUseraddresstables();
for (UserAddressModel userAddressModel : lAddressModels) {
System.out.println(userAddressModel.getUACidade());
System.out.println(userAddressModel.getUAEstado());
}
return userModel;
}
}