json - 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> {
}
有谁知道如何得到正确的回应?
保护你!
解决方案
推荐阅读
- javascript - 名称 .zip 由 JSZip 创建的文件
- sql - SQL:求和同一天的时间戳间隔
- opencl - Buildroot:“/root/foo/bar.aocx”的恼人错误错误架构是“Advanced Micro Devices X86-64”,应该是“ARM”
- c# - 读取带有可能无效的日期时间列的 CSV 文件
- powershell - 从 %temp% 文件夹复制文件的 PowerShell 代码
- python - 第二周之后的每个月的随机日期
- r - 抑制输出,在 R markdown 中保持 pander 和绘图
- javascript - Res.download() 使用 html 表单提交但不是 Axios 后调用
- php - 无法在 MACOSX 上启动 MAMP
- spring-security-oauth2 - 如何使用 oauth2 在 Spring 应用程序中创建 WebClient 对象