【问题标题】:How can i get object while sending as json from Spring MVC without infinity loops如何在没有无限循环的情况下从 Spring MVC 以 json 格式发送对象
【发布时间】:2017-06-12 21:21:35
【问题描述】:

所以,我正在尝试将我的学生对象从服务器获取到我的 androidClient,但我有 ifinity 循环。如果我使用@JsonBackReference/@JsonManagedReference 或@JsonIgnore,我不会像在无限循环的情况下那样得到对象,所以我有一个问题如何做到这一点?这是我的课程:

Student.java

@Entity
@Table(name ="student")
public class Student {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @GenericGenerator(name="increment", strategy = "increment")
    private int id_student;


    @Column(name = "studentName", nullable = false)
    private String studentName;

    @Column(name = "formOfAducation")
    private String formOfAducation;

    @ManyToOne
    @JoinColumn(name ="id_group")
    @JsonBackReference
    private Group group;

    @Column(name = "studentCourse")
    private String studentCourse;

    @Column(name = "studentSpecializatio")
    private String studentSpecializatio;

    @Column(name = "studentBookName")
    private String studentBookName;

    @Column(name = "studentGender")
    private String studentGender;

    public Student(){
    }

   //getter-setters
}

Group.java

@Entity
@Table(name = "party")

public class Group {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @GenericGenerator(name="increment", strategy = "increment")
    private int id_group;

    @Column(name = "groupName", nullable = false)
    private String groupName;


    @OneToMany(targetEntity = Student.class, mappedBy = "group", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JsonManagedReference
    private List<Student> student;


    public Group(){

    }

在客户端我有相同的类,当我试图只从组中传递 id 时,我无法在客户端反序列化它。希望你能帮助我。或者没有办法做到这一点,那么我如何从客户端编辑学生对象?

【问题讨论】:

    标签: java json spring spring-mvc


    【解决方案1】:

    有两种可能的方法。

    第一个是创建 DTO 对象并从实体初始化它们。因此,您可以在没有循环的情况下手动停止在所需的级别。

    第二种方法是unproxy实体来打破导致循环的延迟集合加载。

    【讨论】:

    • 我有与 student.java 中相同的字段的 DTO 对象,我试图通过 RestTemplate.getForObject 获取我的对象我如何获取实体,我是否必须更改我的 DTO 类中的某些内容?
    • 应该有转换器EntityToDTO和DTOToEntity。如何实现它们取决于您。可以是逐个字段手动复制或基于反射。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    相关资源
    最近更新 更多