首页 > 解决方案 > SpringBoot 多对多

问题描述

我正在做一个项目,我想为员工管理创建一个 API。我想为这个人得到这样的回应:

[
  {
    "id": 1,
    "nachname": "Kämpfer",
    "vorname": "Gerrit",
    "projectList": [
      {
        "id": 1,
        "name": "DFBnet"
      },
      {
        "id": 2,
        "name": "TMA"
      }
    ]
  }
]

我想为项目得到这样的东西:

[
  {
    "id": 1,
    "name": "DFBnet",
    "person": [
      {
        "id": 1,
        "nachname": "Kämpfer",
        "vorname": "Gerrit"
      }
    ]
  }
]

但我得到这个人:

[
  {
    "id": 1,
    "nachname": "Kämpfer",
    "vorname": "Gerrit",
    "projectList": [
      {
        "id": 1,
        "name": "DFBnet",
        "person": [
          {
            "id": 1,
            "nachname": "Kämpfer",
            "vorname": "Gerrit",
            "projectList": [
              {
                "id": 1,
                "name": "DFBnet",
                "person": [
                  {
                    "id": 1,
                    "nachname": "Kämpfer",
                    "vorname": "Gerrit",
                    "projectList": [
                      {
...

这对于项目:

[
  {
    "id": 1,
    "name": "DFBnet",
    "person": [
      {
        "id": 1,
        "nachname": "Kämpfer",
        "vorname": "Gerrit",
        "projectList": [
          {
            "id": 1,
            "name": "DFBnet",
            "person": [
              {
                "id": 1,
                "nachname": "Kämpfer",
                "vorname": "Gerrit",
                "projectList": [
                  {
                    "id": 1,
                    "name": "DFBnet",
                    "person": [
                      {
...

但我不知道如何做到这一点。这是我的 SpringBoot 应用程序:

人物类:

package com.example.api.model;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.lang.reflect.Array;
import java.util.*;

@Entity
@Table(name = "person")
public class Person {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @NotNull
    private String nachname;
    @NotNull
    private String vorname;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "person_project",
            joinColumns = @JoinColumn(name = "person_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "project_id", referencedColumnName = "id"))
    private List<Project> projectList;




    public Person(){}

    public Person(String nachname, String vorname){
        this.nachname = nachname;
        this. vorname = vorname;
    }

    public String getNachname() {
        return nachname;
    }

    public void setNachname(String nachname) {
        this.nachname = nachname;
    }

    public String getVorname() {
        return vorname;
    }

    public void setVorname(String vorname) {
        this.vorname = vorname;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

    public List<Project> getProjectList() {
        return projectList;
    }

    public void setProjectList(List<Project> projectList) {
        this.projectList = projectList;
    }
}

项目类:

package com.example.api.model;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

@Entity
@Table(name = "project")
public class Project {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @NotNull
    private String name;

    @ManyToMany(mappedBy = "projectList")
    private List<Person> person;

    public Project(){}

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Person> getPerson() {
        return person;
    }

    public void setPerson(List<Person> person) {
        this.person = person;
    }
}

个人控制器:

package com.example.api.controller;

import com.example.api.model.Person;
import com.example.api.model.Project;
import com.example.api.repository.ProjectRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.example.api.repository.PersonRepository;

import java.util.List;
import java.util.Optional;

@RestController
public class PersonController {

    @Autowired
    PersonRepository personRepo;

    @Autowired
    ProjectRepository projectRepo;


    @GetMapping("/person")
    public List<Person> getPerson(){
        return (List<Person>) personRepo.findAll();
    }

    @PostMapping("/person")
    public Person addPerson(@RequestBody Person newPerson){
        return personRepo.save(newPerson);
    }

    @PutMapping("/person/{id}")
    public Person replacePerson(@RequestBody Person newPerson, @PathVariable Long id){
        return personRepo.findById(id)
                .map(person -> {
                    person.setVorname(newPerson.getVorname());
                    person.setNachname(newPerson.getNachname());
                    return personRepo.save(person);

        })
                .orElseGet(() -> {
                   newPerson.setId(id);
                   return personRepo.save(newPerson);
                });
    }

    @GetMapping("/person/{id}")
    public Optional<Person> findPersonById(@PathVariable Long id){
        return personRepo.findById(id);
    }

    @PostMapping("person/{id}/projects")
    public Optional<Person> addProject(@RequestBody List<Project> projectList, @PathVariable Long id){
        return personRepo.findById(id)
                .map(person -> {
                    person.setProjectList(projectList);
                    return personRepo.save(person);
                });
    }





}

项目负责人:

package com.example.api.controller;

import com.example.api.model.Project;
import com.example.api.repository.ProjectRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
public class ProjectController {

    @Autowired
    ProjectRepository projectRepo;

    @GetMapping("/project")
    public List<Project> getProjects(){
        return projectRepo.findAll();
    }

    @PostMapping("/project")
    public Project addProject(@RequestBody Project newProject){
        return projectRepo.save(newProject);
    }

    @GetMapping("/project/{id}")
    public Optional<Project> findProjectById(@PathVariable Long id){return projectRepo.findById(id);}
}

人员存储库:

package com.example.api.repository;

import com.example.api.model.Person;
import org.springframework.data.jpa.repository.JpaRepository;


import java.util.Optional;

public interface PersonRepository extends JpaRepository<Person, Long> {

    Optional<Person> findById(Long Id);

}

项目存储库:

package com.example.api.repository;


import com.example.api.model.Person;
import com.example.api.model.Project;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.Optional;

public interface ProjectRepository extends JpaRepository<Project, Long> {
}

有谁知道如何得到正确的回应?

保护你!

标签: jsonspring-bootmany-to-manyhttprequest

解决方案


推荐阅读