【问题标题】:Crnk map different resources for one relationCrnk 为一个关系映射不同的资源
【发布时间】:2023-03-13 02:44:01
【问题描述】:

这个问题与 Crnk 框架有关。例如,在 JsonApiResource 我有一个字段。并且根据其他一些值,我希望该字段具有不同的数据。 喜欢第一个选项:

"data": {
    "id": "1",
    "attributes": {
        "firstData": //some data 
    }
}

第二个:

"data": {
    "id": "1",
    "attributes": {
        "secondData": //some data 
    }
}

我尝试通过创建抽象类、在资源中定义此类字段、创建 2 个子类作为 JsonApiResources 并在 DTOMapper 中设置必要的实现来实现这一点。

public abstract class AbstractData {
    abstract List<Integer> getValues();
}

@JsonApiResource(type = "v1/first")
public class FirstTypeData extends AbstractData {
    @JsonApiId
    protected int id;

    @JsonProperty("firstData")
    private List<Integer> values;

    //implemented getter
}

@JsonApiResource(type = "v1/second")
public class SecondTypeData extends AbstractData {
    @JsonApiId
    protected int id;

    @JsonProperty("secondData")
    private List<Integer> values;

    //implemented getter
}

@JsonApiResource(type = "v1/basic")
public class BasicDataDTO {
    @JsonApiId
    protected int id;

    @JsonProperty("data")
    private AbstractData data; //FirstTypeData or SecondTypeData is set here in mapper
}

这很好用。但是当我想把它变成一个关系时(我把 JsonApiRelation 放在数据字段上),它就崩溃了。

我想调用 /v1/basic/{id}/data 并得到

{
    "data": {
        "id": "1",
        "type" : "v1/first",
        "attributes": {
            "firstData": //some data 
        }
    }
}

{
    "data": {
        "id": "1",
        "type" : "v1/second",
        "attributes": {
            "secondData": //some data 
        }
    }
}

这种行为可以实现吗?还是应该使用其他方法?

【问题讨论】:

    标签: java json-api crnk


    【解决方案1】:

    目前,AbstractData 也必须是一个资源(并且有一个资源库支持它)。否则@JsonApiRelation 注解会导致验证错误。但是类似于 JPA 的 @MappedSuperclass 的机制可能值得添加到 crnk。

    【讨论】:

      猜你喜欢
      • 2019-01-11
      • 2022-10-23
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 2017-01-14
      • 2022-12-14
      相关资源
      最近更新 更多