0

我们使用 crnk 框架来实现 json-api。PATCH 的 GET/请求正文有一个响应正文:

{
    "data": {
        "id": "1",
        "type": "v1/indicator-data",
        "attributes": {
            "indicatorValues": [
                {
                    "time": "2018-03-25T00:00:00Z",
                    "indicator1": 50
                },
                {
                    "time": "2018-03-26T00:00:00Z",
                    "indicator1": 50
                }  
            ]
        }
    }
}

但是根据一些外部标志,主体和返回的指标可能会略有不同:

{
    "data": {
        "id": "2",
        "type": "v1/indicator-data",
        "attributes": {
            "indicatorValues": [
                {
                    "time": "2018-03-25T00:00:00Z",
                    "indicator2": 15
                },
                {
                    "time": "2018-03-26T00:00:00Z",
                    "indicator2": 15
                }  
            ]
        }
    }
}

为了实现这一点,我创建了以下层次结构:

@JsonApiResource(type = "v1/indicator-data")
public class IndicatorDataDTO {
    @JsonApiId
    private int id;

    private List<IndicatorTimeEntry> indicatorValues;
}

public class IndicatorTimeEntry {
    private ZonedDateTime time;
}

public class Indicator1TimeEntry extends IndicatorTimeEntry {
    private Double indicator1;
}

public class Indicator2TimeEntry extends IndicatorTimeEntry {
    private Double indicator2;
}

如果支持 @JsonInclude,则只有 1 个 TimeEntry 类,其中包含所有指标字段,并且所有不必要的指标值都将设置为 null。

但事实并非如此,因此尝试了上述方法,其中一种必要的实现是在映射器中手动设置的。

到目前为止,它适用于 GET 方法,而在 PATCH 期间,主体由 crnk 自动映射到 IndicatorTimeEntry 并且 indicator1/2 值丢失。是否可以扩展/执行从 json 到必要的 dto 子类的手动映射?或者也许可以尝试另一种方法?

4

0 回答 0