angularjs 上的 ERR_INCOMPLETE_CHUNKED_ENCODING - 休息服务使用高级 REST 客户端返回无限 json 文件,但邮递员中出现错误

Alf*_*tri 6 javascript java rest json angularjs

我有一个非常奇怪的问题。在 Angular(使用 ionic v1 构建的应用程序)中,我调用了一些在 java 中构建的 REST 调用,但是出现了问题,chrome 向我建议以下错误: ERR_INCOMPLETE_CHUNKED_ENCODING

有趣的代码是这样的,Angular js 中的 REST 服务:

bankaccountsbyuser: function(_getbauser, _error){
            var currentToken = _GetToken();
  
            if(currentToken!=null){
                var Headers = {
                    token: currentToken.tokenUser,
                };
            }
            
            _timerTokenControl(currentToken, _error);
            
            if (setupTime == null) {
                console.log("token scaduto");
                //modificare
                //$window.location.href="login.html";
            }
            

            if (currentToken !== null) {
            $http({  
                        method : 'GET',  
                        headers: Headers,
                        url : REST_URL+'bankaccount'
                    }).then(function successCallback(response) {  
                        console.log(response)
                        _getbauser(response)
                    }, function errorCallback(response) {  
                        console.log(response.statusText);  
                    });  
               }  else {
                   var alertPopup = $ionicPopup.alert({
                         title: 'Accesso negato!',
                         template: 'Devi essere un utente registrato, non sei loggato!'
                     });
                    console.log("NON SEI LOGGATO!!!");
            }
        },
Run Code Online (Sandbox Code Playgroud)

调试: 调试

可以看到,get REST 服务返回了一个错误,因此,让我们看看这个用 java 构建的 REST 服务:

package it.jack.fdd.services;

import java.util.List;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import it.jack.fdd.dao.FactoryDao;
import it.jack.fdd.dao.impl.BankAccountDaoImpl;
import it.jack.fdd.dao.interfaces.BankAccountDao;
import it.jack.fdd.domain.BankAccount;
import it.jack.fdd.domain.User;
import it.jack.fdd.dto.TokenUserDto;
import it.jack.fdd.dto.UserDto;
import it.jack.fdd.util.ConverterDTO;

@Path("/bankaccount")
public class BankAccountServices {

	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public List<BankAccount> getBankAccountOfUser() {
   
		BankAccountDao baDao = new BankAccountDaoImpl();
		List<BankAccount> balist = baDao.getBAByUserId(1);		
		return balist;

	}
Run Code Online (Sandbox Code Playgroud)

我尝试在方法中传递数字“1”,只是为了简化。该方法的实现如下:

package it.jack.fdd.dao.impl;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import it.jack.fdd.dao.interfaces.BankAccountDao;
import it.jack.fdd.domain.BankAccount;
import it.jack.fdd.domain.Staff;
import it.jack.fdd.domain.User;
import it.jack.fdd.util.HibernateUtilLezione;

public class BankAccountDaoImpl extends BaseDaoImpl<BankAccount> implements BankAccountDao{
	

	public List<BankAccount> getBAByUserId(int id) {
		
		try{
			
			Session session = HibernateUtilLezione.openSession();
			Transaction tx = session.beginTransaction();
			
			@SuppressWarnings("unchecked")
			List<BankAccount> accounts = session.createQuery("from BankAccount b "
					+ "where b.user= "+id).list();
			
			tx.commit();
			session.close();
			
			return accounts;
		}
		catch(HibernateException e){
			e.printStackTrace();
			return null;
		}
	}
	
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,该方法要求一个 id,我输入 id 1 只是为了检查,因为在数据库中有一个具有该 id 的字段。尝试使用 java,它返回给我一个列表

[it.jack.fdd.domain.BankAccount@4f8d86e4]

我还检查了列表的维度为 1(因此,只有一条记录,就像在数据库中一样,只有 1 条记录包含该 iduser)

因此,尝试使用邮递员打开此 REST 调用,结果如下:

邮递员错误

奇怪的是,邮递员向我展示了与另一个 REST 调用相同的结果,它以前有效。但对于最后一个 REST 调用来说不是问题,因为奇怪的是它适用于我的应用程序,它不仅仅适用于邮递员。因此,尝试使用高级 REST 客户端时,我得到了一个奇怪的不同结果:

高级休息客户端1

一个奇怪的、非常大的列表,每次同一个字段都会重复!就像一个循环!会发生什么?我该如何解决?

Alf*_*tri 0

解决了。问题出在java的域类中:当域类具有一对多关系时,必须放置标签@JsonIgnore以避免这些重复记录在json文件中例子

实体类:

package it.jack.fdd.domain;
// Generated 30-nov-2016 0.17.09 by Hibernate Tools 4.3.1.Final

import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * BankAccount generated by hbm2java
 */
@Entity
@Table(name = "bank_account", catalog = "fdd_dbproducts")
public class BankAccount implements java.io.Serializable {

	private Integer idbankAccount;
	private User user;
	private String iban;
	private String pin;
	private String society;
	private Date expiration;

	public BankAccount() {
	}

	public BankAccount(User user, String iban, String pin, String society) {
		this.user = user;
		this.iban = iban;
		this.pin = pin;
		this.society = society;
	}

	public BankAccount(User user, String iban, String pin, String society, Date expiration) {
		this.user = user;
		this.iban = iban;
		this.pin = pin;
		this.society = society;
		this.expiration = expiration;
	}

	@Id
	@GeneratedValue(strategy = IDENTITY)

	@Column(name = "idbank_account", unique = true, nullable = false)
	public Integer getIdbankAccount() {
		return this.idbankAccount;
	}

	public void setIdbankAccount(Integer idbankAccount) {
		this.idbankAccount = idbankAccount;
	}

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "fkuser_baccount", nullable = false)
	public User getUser() {
		return this.user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	@Column(name = "iban", nullable = false, length = 45)
	public String getIban() {
		return this.iban;
	}

	public void setIban(String iban) {
		this.iban = iban;
	}

	@Column(name = "pin", nullable = false, length = 45)
	public String getPin() {
		return this.pin;
	}

	public void setPin(String pin) {
		this.pin = pin;
	}

	@Column(name = "society", nullable = false, length = 45)
	public String getSociety() {
		return this.society;
	}

	public void setSociety(String society) {
		this.society = society;
	}

	@Temporal(TemporalType.DATE)
	@Column(name = "expiration", length = 10)
	public Date getExpiration() {
		return this.expiration;
	}

	public void setExpiration(Date expiration) {
		this.expiration = expiration;
	}

}
Run Code Online (Sandbox Code Playgroud)