Bonjour,

je suis en train de développer une application web (JEE) "Gestion des banques" basé sur angularJs. c'est à dire mes fonctionnalités angulrJs assurent la manipulation de données a travers le web services RESTFull.

*code de l'entité "Compte":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
public class Compte implements Serializable{
 
	@Id
	//@GeneratedValue(strategy=GenerationType.IDENTITY)
	private String numCompte;
 
	@Temporal(TemporalType.DATE)
	private Date dateCreation;
 
	private Double solde;
 
	@ManyToOne
	@JoinColumn(name="CODE_CLI")
	private Clients client;
 
	@ManyToOne
	@JoinColumn(name="NUM_EMP")
	private Employe employe;
 
    @OneToMany(mappedBy="compte", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    private Collection <Operation> operations;
 
	public Compte(String numCompte, Double solde, Clients cl, Employe emp) {
		super();
		this.numCompte= numCompte;
		//this.operations= ops;
		this.dateCreation = new Date();
		this.solde = solde;
		this.client = cl;
		this.employe = emp;
	}
 
	public Compte(){
		super();
		this.dateCreation = new Date();
	}
 
	public String getNumCompte() {
		return numCompte;
	}
 
	public void setNumCompte(String numCompte) {
		this.numCompte = numCompte;
	}
 
	public Date getDateCreation() {
		return dateCreation;
	}
 
	public void setDateCreation(Date dateCreation) {
		this.dateCreation = dateCreation;
	}
 
	public Double getSolde() {
		return solde;
	}
 
	public void setSolde(Double solde) {
		this.solde = solde;
	}
 
	public Clients getClient() {
		return client;
	}
 
	public void setClient(Clients client) {
		this.client = client;
	}
	@JsonIgnore
	public Employe getEmploye() {
		return employe;
	}
 
	public void setEmploye(Employe employe) {
		this.employe = employe;
	}
 
	@JsonIgnore
	public Collection<Operation> getOperations() {
		return operations;
	}
 
   @JsonSetter
	public void setOperations(Collection<Operation> operations) {
		this.operations = operations;
	}
 
 
 
}
lorsque je consulte un compte bancaire (en spécifiant le "code" ), il m'affiche le message d'erreur suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
SyntaxError: Unexpected token t in JSON at position 143983
    at JSON.parse (<anonymous>)
    at oc (angular.js:1066)
    at Yb (angular.js:8570)
    at angular.js:8655
    at s (angular.js:323)
    at Yc (angular.js:8654)
    at c (angular.js:9380)
    at angular.js:13175
    at l.$eval (angular.js:14388)
    at l.$digest (angular.js:14204)
Ce probléme indique qu'il y a un boucle récursive infini lorsque je consulte un compte:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
2016-12-28 11:20:35.532 DEBUG 5308 --- [nio-8080-exec-4] o.s.w.s.m.m.a.HttpEntityMethodProcessor  : Written [{timestamp=Wed Dec 28 11:20:35 CET 2016, status=200, error=OK, exception=org.springframework.http.converter.HttpMessageNotWritableException, message=Could not write content: Infinite recursion (StackOverflowError) (through reference chain: com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.enti>com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->>com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.>com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]->com.sesame.entities.CompteCourant["operations"]->org.hibernate.collection.internal.PersistentBag[0]->com.sesame.entities.Versement["compte"]), path=/banques/Comptes/CC1}] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@5d37aa0f]
2016-12-28 11:20:55.947 DEBUG 5308 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet        : Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2016-12-28 11:20:55.947 DEBUG 5308 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet        : Successfully completed request
Ce probléme proviens lorsque le compte contient un ensemble des opérations.
J'ai fais un test sur le compte donc j'ai supprimé tous les opérations du compte, alors les informations sont bien affichés, mais s'il a une ou plusieurs opérations le probléme ci-dessus sera affiché et il bloc le fonctionnement normale de l'application.


Merci de m'aider pour trouver la bonne solution,