Spring-使用ManyToMany发送过多信息

f4t66c6m  于 2023-05-27  发布在  Spring
关注(0)|答案(1)|浏览(109)

我的Spring应用程序有一个问题-我正在练习ManyToMany Relationship。我做了两个实体-学生,和他们的团体-一切都很好,但当我试图显示他们在 Postman 我有意大利面条的结果如下:
{"id ":4," lastName ":" guzik "," groups ":[{" id":1,"groupName":"grupka","students":…….(较短的版本,大约1000行)[{"id ":1,"姓氏":"smith","groups":[2019 - 03 - 22][2019 - 03 - 22][2019 - 03 - 22][2019 - 03 - 22][2019 - 03 - 22][2019 - 03 - 22][2019 - 03 - 22][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03]2019 - 03 - 03][2019 - 03][[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 22][2019 - 01 - 01][2019 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 22][2019 - 01 - 01 - 01][2019 - 01 - 01][2019 - 01 - 01]2019 - 01 - 01][2019 - 01 - 01][2019 - 01 - 0@@[2019 - 03 - 29][2019 - 03 - 29][2019 - 03 - 29][2019 - 03 - 29][2019 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 03][2019 - 03 - 01][2019 - 03 - 01][2019 - 03 - 01][2019 - 01][2019 - 01][2019 - 01][2019 - 01][2019 - 01][2019 - 01]2019 - 01][2019 - 01][“2022 - 04 - 25T08:二十五:31.387 + 00:00","状态":200," error":"确定","路径":"/api/student/4 "}
我做错了什么?

@RestController
@RequestMapping("/api")
public class MainController{
    @Autowired
    GroupRepo groupRepo;
    @Autowired
    StudentRepo studentRepo;

    @GetMapping("/student/{id}")
    ResponseEntity<?> getStudent(@PathVariable long id){
        Optional<Students> student=studentRepo.findById(id);
        return ResponseEntity.ok().body(student);
    }
    @GetMapping("/group/{id}")
    ResponseEntity<?> getGroup(@PathVariable long id){
        Optional<Groupssss> group=groupRepo.findById(id);
        return ResponseEntity.ok().body(group);
    }
    @GetMapping("/student/{id}/groups")
    ResponseEntity<?> studentGroups(@PathVariable long id){
        Students student=studentRepo.findById(id).orElseThrow(()-> new UsernameNotFoundException("student not found"));
        return ResponseEntity.ok().body(student.getGroups());
    }
    @PostMapping("/add")
    @Transactional
    ResponseEntity<?> addStudentToGroup(@RequestHeader long id) throws Exception{
        Students student=studentRepo.findById(id)
                .orElseThrow(()-> new UsernameNotFoundException("student not found"));

        Groupssss group=groupRepo.findByGroupName("grupka").orElseThrow(Exception::new);

        student.addGroup(group);
        studentRepo.save(student);

        return ResponseEntity.ok().build();
    }

@Entity
public class Groupssss {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String groupName;

    @ManyToMany(fetch = FetchType.LAZY,
            cascade = {
                    CascadeType.PERSIST,
                    CascadeType.MERGE
            },
            mappedBy = "groups")
    private Set<Students> students=new HashSet<>();

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

    public void setStudents(Set<Students> students) {
        this.students = students;
    }

    public Set<Students> getStudents() {
        return students;
    }

    public String getGroupName() {
        return groupName;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }

}

@Entity
@Table(name="students")
public class Students {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    long id;

    String firstName;
    String lastName;

    @ManyToMany(fetch = FetchType.LAZY,
            cascade = {
                    CascadeType.PERSIST,
                    CascadeType.MERGE
            })
    @JoinTable(name="student_group",
            joinColumns = @JoinColumn(name="student_id"),
            inverseJoinColumns = @JoinColumn(name="group_id"))
    Set<Groupssss> groups=new HashSet<>();

    public Students(){}

    public Students(String firstName, String lastName){
        this.firstName=firstName;
        this.lastName=lastName;
    }

    public void addGroup(Groupssss group){
        this.groups.add(group);
        group.getStudents().add(this);
    }

    public Set<Groupssss> getGroups() {
        return groups;
    }

    public String getLastName() {
        return lastName;
    }

    public String getName() {
        return firstName;
    }

    public void setGroups(Set<Groupssss> groups) {
        this.groups = groups;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void setName(String firstName) {
        this.firstName = firstName;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
}
wlwcrazw

wlwcrazw1#

如果你使用ManyToMany关系,当你试图获取它的List时,它会递归地调用Parent和Child实体。在子实体中必须存在无知,如:
在Parent实体中,您可以调用@JsonManagedReference
在子实体中,您可以调用@JsonBackReference
文档在这里:双向关系

public class User {
    public int id;
    public String name;

    @JsonManagedReference
    public List<Item> userItems;
}

public class Item {
    public int id;
    public String itemName;

    @JsonBackReference
    public User owner;
}

或者,您可以在Child实体中的Parent声明顶部使用@JsonIgnore。当你使用JsonIgnore时,情况会变得更糟。
文档在这里:Jackson忽略属性

public class MyDto {

    private String stringValue;
    @JsonIgnore
    private int intValue;
    private boolean booleanValue;

    public MyDto() {
        super();
    }
}

或者在需要忽略许多字段时使用@JsonIgnoreProperties

@JsonIgnoreProperties(value = { "intValue" })
public class MyDto {

    private String stringValue;
    private int intValue;
    private boolean booleanValue;

    public MyDto() {
        super();
    }
}

享受

相关问题