我正在使用 Spring MVC 和 JSON 来完成一些任务,但我遇到了这个异常

I'm using Spring MVC and JSON to do some tasks, and i've got this exception

我已经找了三天了,我的错误仍然存​​在,我尝试了很多解决方案都没有任何积极的结果!

我有 ManyToMany 关系,这是我的 JPA 映射:

@实体 public class Facteur 实现 Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long idF;

.......

@ManyToMany
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name="Affectation",joinColumns=@JoinColumn(name="IdF"), inverseJoinColumns=@JoinColumn(name="idT"))
private List<Tournee> tournees;

.......

}

"Tournee" Class是这样的

@实体 public class Tournee 实现可序列化 {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idT;

....
@ManyToMany(mappedBy="tournees")
@LazyCollection(LazyCollectionOption.FALSE)
private List<Facteur> facteurs;

.....

}

这是我的控制器:

@RequestMapping(value="/getFacteur/", method=RequestMethod.GET)
@ResponseBody
public Facteur getFacteurById(@RequestParam("id") Long idF) {
    Facteur f = facteurService.getById(idF);
    System.out.println(f.toString());
    return f;
}

和JQuery代码是:

$(document).ready(function() {
        $(".updatelink").click(function() {
            var facteurId = $(this).data("facteur-id");
            $.ajax({
                type : "GET",
                url : "http://localhost:8080/distribution/facteur/getFacteur/",
                data : { id : facteurId },
                success : function(data) {
                            alert('SUCCESSS');
                            },
                error : function(){
                            alert("ERROR");
                }
            });
        });
    });

有什么解决办法吗?

此致!

您 运行 进入 Whosebug 错误,因为 Facteur class 引用了 tournees,而 Tournees 又引用了 Facteur - 在 JSON 序列化时循环引用。
只需将 @JsonIgnore 注释添加到 Facteur class 中的 private List<Tournee> tournees; 声明,你应该没问题。

不应序列化关系的两侧之一,以避免导致您的 Whosebug 错误的无限循环。您可以使用 @JsonManagedReference@JsonBackReference 来避免错误:

//class Facteur
@ManyToMany
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name="Affectation",joinColumns=@JoinColumn(name="IdF"), inverseJoinColumns=@JoinColumn(name="idT"))
@JsonManagedReference
private List<Tournee> tournees;
//class Tournee
@ManyToMany(mappedBy="tournees")
@LazyCollection(LazyCollectionOption.FALSE)
@JsonBackReference
private List<Facteur> facteurs;

在要序列化的关系的前部添加@JsonManagedReference,在不序列化的关系的后部添加@JsonBackReference。事实上,如果你将一个 Tournee 实例序列化为 JSON,你将 而不是 得到 Facteur 数组实例。为避免此缺点,只需使用简单的 @JsonIgnore,但请记住,因此在序列化期间将忽略 getter 和 setter。