Katharsis relationship with different types?

336 Views Asked by At

I would like to deal with JSON that can be either:

{
  "data": {
    "id": "1",
    "type": "permissions",
    "attributes": { "permission": "VIEW" }
    "relationships": {
      "user": { "data": { "id": "U1", "type": "users" } }
      "resource": { "data": { "id": "G1", "type": "groups" } }
    }
  }
}

OR

{
  "data": {
    "id": "1",
    "type": "permissions",
    "attributes": { "permission": "VIEW" }
    "relationships": {
      "user": { "data": { "id": "U1", "type": "users" } }
      "resource": { "data": { "id": "P1", "type": "pages" } }
    }
  }
}

That is, I would like the "resource" relationship type to be entirely customizable ("groups" or "pages" or anything else).

Is there a way to do that with Katharsis? I was hoping for some kind of inheritance...

@JsonApiResource(type = "permissions")
public class Permission {
  ...
  @JsonApiToOne
  private SharedResource resource;
  ...
}

public interface SharedResource {
  ...
}

@JsonApiResource(type = "pages")
public class Page implements SharedResource {
  ...
}

But that doesn't work completely. I've finagled it enough where a findAll returns pretty well (though the links don't reflect the type "pages"), but any POST with the relationships set returns a 405 Method Not Allowed.

Not sure it's possible, but I'd really like it to be since I like Katharsis.

1

There are 1 best solutions below

1
On

I think what you're referring to is polymorphic entity types. If so, this has been asked for repeatedly but currently doesn't exist.