Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring引导接口投影如何返回所需的JSON结构_Spring Boot_Jpa_Spring Data Jpa_Projection - Fatal编程技术网

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
),并为like
DashBoardResponse 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
}