1

我从 Springboot 开始的 Maven Spring 项目遇到了问题。我的问题是当我调用控制器的方法时,它会返回一些我不想要的字段。

例如,“Pays”(=country)与“Departement”(部门)具有 OneToMany(一个 Pays got many Departements)相关

这是我的实体:

@Entity
@Table(name = "pays")
public class Pays {

    public interface DefaultView {}

    @Id
    @JsonView(DefaultView.class)
    private Long id;
    @JsonView(DefaultView.class)
    private String nom;

    @OneToMany(mappedBy = "pays")
    private List<Departement> departements;

    public Pays(Long id, String nom) {
        this.id = id;
        this.nom = nom;
    }

    public Pays() {
    }

    public Long getId() {
        return id;
    }

    public String getNom() {
        return nom;
    }

    public List<Departement> getDepartements() {
        return departements;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public void setDepartements(List<Departement> departements) {
        this.departements = departements;
    }
}

这个控制器:

@RestController
@RequestMapping(value = "/ws/pays")
public class PaysController {

    @Autowired
    private PaysService paysService;

        @RequestMapping("/default")
        @JsonView(Pays.DefaultView.class)
        public List<Pays> getPayss() {
            return paysService.findAll();
        }
}

每次我去 /ws/pays/default - 并调用“getPayss()” - 它都会进行无限循环,试图调用“Pays”的“Departements”,以及每个“Departement”的“Pays”,等等...

对于这个例子,我不需要“Pays”的“Departements”,所以我可以使用@JsonIgnore,但我不想这样做,因为对于其他调用,我需要“Departement”的“Pays” "

对于此示例,是否有人有解决方案来仅获取和序列化我的对象“Pays”的“id”和“nom”?

仅供参考,这是我的实体“部门”的示例:

@Entity
@Table(name = "departement")
public class Departement {

    @Id
    private Long id;
    private String nom;
    private String code;
    private String soundex;

    @ManyToOne
    @JoinColumn(name = "id_pays")
    private Pays pays;

    //Getters and setters are properly declared, but not shown here to preserve space
}

非常感谢

4

1 回答 1

1

看看:Infinite Recursion with Jackson JSON and Hibernate JPA issue

您的问题已通过上述链接进行了描述和解决。

于 2015-08-05T21:59:19.847 回答