问题标签 [crnk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
json-api - 如何在没有顶级存储库的情况下在 CRNK (JSON-API) 中实现子资源关系
这个问题主要与如何使用 CRNK 框架执行此操作有关,但是我也将其标记为 JSON-API,因为我对这种方法在 JSON-API 规范的范围内是否普遍正确感兴趣。
我不想通过深入了解问题所涉及的确切领域的细节来使事情复杂化,所以我将稍微简化一下。
我有一个队列,它具有各种属性,例如名称、描述等。队列的另一个属性是一些历史时间戳数据,本质上是一个看起来像这样的对象数组:
{ "time": "21/10/2018 10:15 GMT", "value": 35 }
实际上,队列可以具有许多与该队列的不同数据相关的这些属性。阵列中的数据量可能非常大,具体取决于已收集的数据量。
我的第一个直觉是在队列中为这个属性建模:
然而,我对这种方法的问题是整个数据集将与队列一起返回(这可能非常大,并不总是需要)。我可以通过使用稀疏字段集来解决这个问题,但我并不特别喜欢使用不同的字段参数一遍又一遍地请求队列以获取我在特定场景中所追求的数据的概念。
我想做的是将此历史数据建模为关系,这样可以通过关系 URL 访问数据,例如/api/queues/1/history
这对我来说似乎最有意义,因为 API 的预期用途是各种屏幕将使用附加到队列的不同数据集,因此每个屏幕都有队列对象,然后可以通过这些关系链接请求它感兴趣的数据。
然而,我遇到的问题是,这里的历史数据不作为后端的可识别资源存在,仅作为队列的子资源存在(即 select * from historydata where queueid = 1)。这是我不确定如何在 CRNK 中实现它的地方。似乎要为关系建模,我还必须为子资源(/api/history/{id})创建一个 ResourceRepository。但我不想要这个。
所以我关于 CRNK 实现的问题是如何配置我的资源和存储库,以便:
此外,在旁注中,将 ID 分配给子资源的推荐方法是什么,因为它在这方面不作为可识别实体存在并且 ID 在很大程度上无关紧要?
java - Crnk JsonApiRelation、OneToMany 和过滤实现
我在 java 项目中使用 crnk (JSON-API),我有 3 个关于它在 spring boot 和 jpa 中的使用的问题——在文档中没有找到确切的实现细节。
例如,我有 2 个实体和各自的表:
/li>
应该如何引入 JsonApiRelation 才能调用“/employee/1”和“/employee/1/type”url?
例如,还有一个实体。
/li>
首先,我想为每个员工列出项目列表,他是主管,按名称联合,并将其列为 Json 中的属性。
尝试使用 @OneToMany 和 @JoinColumn 注释来实现它,但得到了 StackOverflowException。这怎么可能实现。其次,如何使用 Relation 来实现?像“/employee/1/projects”网址。
- 我应该如何为 findAll 方法实现结果的自定义过滤?例如,我有一个所有员工的列表,但我想从响应中排除其中一些。应该为此行为引入哪个类/方法?
java - Crnk 为一个关系映射不同的资源
这个问题与 Crnk 框架有关。例如,在 JsonApiResource 我有一个字段。并且根据其他一些值,我希望该字段具有不同的数据。就像第一个选项:
第二个:
我试图通过创建抽象类、在资源中定义此类字段、创建 2 个子类作为 JsonApiResources 并在 DTOMapper 中设置必要的实现来实现这一点。
这工作正常。但是当我想让它成为一个关系时(我把 JsonApiRelation 放在数据字段上),它就崩溃了。
我想调用 /v1/basic/{id}/data 并获取
或者
这种行为可以实现吗?还是应该使用其他方法?
json-api - crnk json 实现 Java API 文档
我们在服务器端(Java)使用 crnk JSON API 实现。我在这里看到 crnk 文档http://www.crnk.io/documentation/。但是,我找不到相应的 Java API 参考文档。不确定是否有可用的?
hibernate - JSON 中与父级的关系链接不会链接到上一级,可能是由于两个键
我有一个“电影”课程和一个“演员”课程。我已将实体中的这些映射为 OneToMany,反之亦然(一部电影可以有很多演员)。Crnk 正在创建端点并且它们运行良好,除了“演员”上的“关系”下的链接创建一个位于“演员”端点下的 URL,当它真的应该返回到根电影 URL 时。
所以在 Actors 下 findAllrelationships.movie.links.related
应该是:
"related": "/api/v1/movies/1"
而不是
"related": "/api/v1/actors/156/movie"
和类似的 forself
电影 findAll 端点
演员 findAll 端点
以下是实体及其关系注释:
电影实体
演员实体
您还会注意到 Movie 有两个 ID,它的主键使用 column MID
,但用作外键的列ID
也是唯一 ID。不幸的是,这是数据库的设置,无法更改。另外,据我所知,使用referencedColumnName
应该可以解决这个问题。
如果有人对为什么这可能无法在当前状态下工作有任何建议,将不胜感激
谢谢!
ps我出于偏执的原因更改了类名,以防万一我错过了某些东西并且某处的变量没有完全对齐
java - 从 Json 手动映射到 crnk 中的 DTO 子类之一
我们使用 crnk 框架来实现 json-api。PATCH 的 GET/请求正文有一个响应正文:
但是根据一些外部标志,主体和返回的指标可能会略有不同:
为了实现这一点,我创建了以下层次结构:
如果支持 @JsonInclude,则只有 1 个 TimeEntry 类,其中包含所有指标字段,并且所有不必要的指标值都将设置为 null。
但事实并非如此,因此尝试了上述方法,其中一种必要的实现是在映射器中手动设置的。
到目前为止,它适用于 GET 方法,而在 PATCH 期间,主体由 crnk 自动映射到 IndicatorTimeEntry 并且 indicator1/2 值丢失。是否可以扩展/执行从 json 到必要的 dto 子类的手动映射?或者也许可以尝试另一种方法?
jpa - crnk 子关系过滤允许吗?
我们将crnk用于 json-api 的服务器端作为客户端实现。
jpa 绑定的服务器实现是否支持子关系过滤器?
我们想要过滤在特定开始时间之后有事件的所有系列。
我们分离了 json-api 和 JPA 实体类。请参阅下面的 json-api 作为实体类
例如我使用的网址(由 crnk 客户端代码生成):
我们收到的错误是:
类实现:
java - 如何修复:JpaCriteriaQueryBackend.getOrderList 中的 NullPointerException
我使用 3.0.20190714142556 在 Java EE 7.0 服务器(Oracle WebLogic)上进行设置,其中一个简单的资源(客户)从数据库加载为 JPA 实体和 JpaEntityRepositoryBase。可以毫无问题地部署应用程序。crnk.io 将在此应用程序中与 JAX-RS 一起使用。但是,当使用 findAll() 访问资源(客户)时,我在JpaCriteriaQueryBackend.getOrderList()
.
尝试在 Oracle WebLogic Server 12.2.1.3 和 Payara Server 中使用该应用程序。在这两种情况下,都发生了相同的错误。
此类中的以下代码行返回 null 而不是我猜的空列表:criteriaQuery.getOrderList()。
目前在 JpaCriteriaQueryBackend 的第 109 行报告了 NullPointerException。预期结果是所有可用客户都将被加载。
预期结果是从数据库中获取客户列表。
spring-boot - 使用没有存储库的 CRNK
然而,我们已经标准化为我们的 REST 端点使用 JSON:API;并非我们所有的数据都围绕存储库展开,似乎 CRNK 需要存储库才能工作。
那是对的吗?
例子
我写了一个非常简单的 Spring Boot 2.1.9 示例,它有一个控制器并在其中包含 CRNK,但是当我进入我的控制器时,我没有得到预期的 JSON:API 输出。
请记住,我刚刚开始研究 CRNK,这只是我正在测试的一个简单的“hello world”类型的应用程序
这是我的例子
Country 只是我创建的一个虚拟类,它是:
结果
但是当我使用以下 URL http://localhost:8080/test/v1.0/US?filter[region]=northeast我得到
我本来期望 JSON API 类型的结果
谢谢!