Crnk 为一个关系映射不同的资源
Crnk map different resources for one relation
问题与Crnk框架有关。例如,在 JsonApiResource 中我有一个字段。根据其他一些值,我希望该字段具有不同的数据。
喜欢第一个选项:
"data": {
"id": "1",
"attributes": {
"firstData": //some data
}
}
第二个:
"data": {
"id": "1",
"attributes": {
"secondData": //some data
}
}
我试图通过创建抽象 class、在资源中定义此类字段、创建 2 个子classes 作为 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
}
}
}
这种行为可以实现吗?或者应该使用另一种方法?
目前 AbstractData 也必须是资源(并且有一个资源库支持它)。否则 @JsonApiRelation 注释将导致验证错误。但是类似于JPA的@MappedSuperclass的机制可能值得添加到crnk中。
问题与Crnk框架有关。例如,在 JsonApiResource 中我有一个字段。根据其他一些值,我希望该字段具有不同的数据。 喜欢第一个选项:
"data": {
"id": "1",
"attributes": {
"firstData": //some data
}
}
第二个:
"data": {
"id": "1",
"attributes": {
"secondData": //some data
}
}
我试图通过创建抽象 class、在资源中定义此类字段、创建 2 个子classes 作为 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
}
}
}
这种行为可以实现吗?或者应该使用另一种方法?
目前 AbstractData 也必须是资源(并且有一个资源库支持它)。否则 @JsonApiRelation 注释将导致验证错误。但是类似于JPA的@MappedSuperclass的机制可能值得添加到crnk中。