【问题标题】:Crnk JsonApiRelation, OneToMany and filtering implementationCrnk JsonApiRelation、OneToMany 和过滤实现
【发布时间】:2018-04-04 19:11:42
【问题描述】:

我在 java 项目中使用 crnk (JSON-API),我有 3 个关于它与 spring boot 和 jpa 一起使用的问题 - 在文档中没有找到确切的实现细节。

  1. 例如,我有 2 个实体和各自的表:

    @Entity
    @JsonApiResource(type = "employee")
    public class Employee {
        @Id
        @JsonApiId
        private int id;
    
        private String name;
    
        @ManyToOne
        @JoinColumn(name = "typeId")
        private EmployeeType employeeType; //stored in table as typeId
    }
    
    @Entity 
    @JsonApiResource(type = "type")
    public class EmployeeType {
        @Id
        @JsonApiId
        private int id;
    
        private String typeName;
    
        private int salary;
    }
    

应该如何引入 JsonApiRelation 才能调用“/employee/1”和“/employee/1/type”url?

  1. 例如,还有一个实体。

    @Entity
    @JsonApiResource(type = "project")
    public class Project {
        @Id
        @JsonApiId
        private int id;
    
        private String supervisorName;
    
        private String projectName;
    }
    

首先,我想为每个员工列出项目列表,他是主管,按名称联合,并将其列为 Json 中的属性。

尝试使用 @OneToMany 和 @JoinColumn 注释来实现它,但得到了 StackOverflowException。这怎么可能实现。其次,如何使用 Relation 来实现?比如“/employee/1/projects”网址。

  1. 我应该如何为 findAll 方法实现自定义结果过滤?例如,我有一个所有员工的列表,但我想从响应中排除其中一些。应该为此行为引入哪个类/方法?

【问题讨论】:

    标签: java spring-boot jpa crnk


    【解决方案1】:
    1. @JsonApiRelation 注释应该不是必需的。 Crnk 将检测 @ManyToOne 注释并进行相应的映射。
    2. 在 crnk-jpa 的情况下,指定 JPA 中的所有关系就足够了。匹配 JSON API 关系。所以你的方法似乎不错。 StackoverflowException 堆栈跟踪是什么? (示例旁边,crnk-jpa中也有很多示例实体)
    3. 我会使用装饰器。见http://www.crnk.io/documentation/#_request_filtering。 RepositoryDe​​coratorFactory 允许在调用者和 crnk-jpa(或任何其他类型的存储库)之间放置自定义存储库。在那里,您可以执行任何类型的修改(也许)调用“真实”存储库。 => 将为此添加一个示例

    您也可以在 crnk 中开票以获取任何文档/示例说明。

    【讨论】:

    • 1.映射到父资源工作正常。当我调用“/employee/1”时,我看到 EmployeeType 具有属性中的字段。但是当我尝试调用“/employee/1/projects”时,我收到了 ResourceFieldNotFoundException 的 500 错误。这种情况至少有效/可能吗? 2. 是toString()的问题,已经解决了,谢谢!
    • 关系已声明?并且在请求 /employee/1 时也可见。
    猜你喜欢
    • 2020-03-03
    • 2018-12-12
    • 2018-10-06
    • 1970-01-01
    • 2016-08-18
    • 2022-01-23
    • 2014-06-27
    • 1970-01-01
    • 2020-11-29
    相关资源
    最近更新 更多