从Json手动映射到crnk中的DTO子类之一

时间:2018-07-02 10:07:53

标签: java json-api crnk

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

{
    "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 child calss?还是可以尝试其他方法?

0 个答案:

没有答案