Spring Boot接口投影如何返回所需的JSON结构

问题描述

我正在使用接口投影

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
                },{
                    "reviewsType": "HLSD Review","reviewId": 423
                }
            ],"stakeHolders": [
                {
                    "id": 468,"projectResource": "Joseph"
                },{
                    "id": 644,"projectResource": "Renji"
                }
            ]
        }
    ]
}

我希望JSON看起来像这样

{
    "dashboards": [
        {
            "projectID": 211281,"reviews":
                {
                    "reviewsType": "Assessment Review","projectResource": "Renji"
                }
            ]
        },{
            "projectID": 211281,"reviews":
                {
                    "reviewsType": "HLSD Review","reviewId": 423
                },"projectResource": "Renji"
                }
            ]
        }
    ]
}

评论对象不再分组在一起,而是根据reviewsType字段分开

回购界面

@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",orphanRemoval = true)
    private List<StakeHolder> stakeHolders;
    
    //getters and setters removed for brevity
}

评论类(由于外观相同,省略StakeHolder类)

@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
}

如何使用接口投影返回想要的JSON结构?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)