Spring boot Spring引导接口投影如何返回所需的JSON结构
我使用的是界面投影Spring boot Spring引导接口投影如何返回所需的JSON结构,spring-boot,jpa,spring-data-jpa,projection,Spring Boot,Jpa,Spring Data Jpa,Projection,我使用的是界面投影 public interface Dashboard { public int getProjectID(); // Review table List<ReviewRs> getReviews(); // StakeHolder table List<SteakHolderRs> getstakeHolders(); interface ReviewRs {
public interface Dashboard
{
public int getProjectID();
// Review table
List<ReviewRs> getReviews();
// StakeHolder table
List<SteakHolderRs> getstakeHolders();
interface ReviewRs
{
int getReviewId();
String getReviewsType();
}
interface SteakHolderRs
{
int getId();
String getProjectResource();
}
}
我希望JSON看起来像这样
{
"dashboards": [
{
"projectID": 211281,
"reviews":
{
"reviewsType": "Assessment Review",
"reviewId": 396
},
"stakeHolders": [
{
"id": 468,
"projectResource": "Joseph"
},
{
"id": 644,
"projectResource": "Renji"
}
]
},
{
"projectID": 211281,
"reviews":
{
"reviewsType": "HLSD Review",
"reviewId": 423
},
"stakeHolders": [
{
"id": 468,
"projectResource": "Joseph"
},
{
"id": 644,
"projectResource": "Renji"
}
]
}
]
}
审阅对象不再分组在一起,而是根据ReviewType字段分开
回购接口
@Repository
public interface ProjectRepo extends JpaRepository<Project, Integer>
{
public List<Dashboard> findAllProjectedBy();
}
如何使用接口投影返回所需的JSON结构?您期望的结构实际上与实体结构不匹配,因此您可以在获取Yes后手动重新构造。我如何重组以匹配我想要的结果?我一直在尝试不同的接口重构,但无法获得预期的结果。我认为直接在接口中是不可能的,您需要获取接口,然后手动在类中重新构造数据。谢谢。您是否有关于如何手动重新构造界面内数据的建议,或者我可以通过谷歌关键词开始学习?为您的预期结构创建一个类(例如:
DashBoardResponse
),并为likeDashBoardResponse convert(Dashboard d,Review r)
创建一个转换器类。然后在List
上循环,然后对每个Dashboard
的List
进行嵌套循环,并调用convert-to-converter方法来获取Dashboard响应
,然后添加到arraylist中。
@Repository
public interface ProjectRepo extends JpaRepository<Project, Integer>
{
public List<Dashboard> findAllProjectedBy();
}
@Entity
@Table(name = "project")
public class Project
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ProjectID")
private int projectID;
@OneToMany(mappedBy = "h_project", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<Review> reviews;
@OneToMany(mappedBy = "l_project", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<StakeHolder> stakeHolders;
//getters and setters removed for brevity
}
@Entity
@Table(name = "review")
public class Review
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "reviewID")
private int reviewId;
@Column(name = "ReviewsType")
private String reviewsType;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinColumn(name = "projectId", insertable=false, updatable=false)
private Project h_project;
//getters and setters removed for brevity
}