jasminb / jsonapi-converter

JSONAPI-Converter is a Java/Android library that provides support for working with JSONAPI spec
Apache License 2.0
272 stars 81 forks source link

Clearing a resource relationship #223

Open bensullivan opened 4 years ago

bensullivan commented 4 years ago

Hi

We have a requirement to be able to clear (make null) an existing relationship on a resource. As far as I'm aware the JSON:API spec supports this (where prior to this example PATCH request, the author relationship was "data": { "type": "people", "id": "1" }):

PATCH /articles/1 HTTP/1.1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json

{
  "data": {
    "type": "articles",
    "id": "1",
    "relationships": {
      "author": {
        "data": null
      }
    }
  }
}

When I come to deserialise a request like this I am getting a InvalidJsonApiResourceException: Resource must contain at least one of 'data', 'error' or 'meta' nodes.

Assuming my interpretation of the JSON:API spec for this scenario isn't wrong, is there a way to clear resource relationships with jsonapi-converter?

Thanks for your help!

Ben

bensullivan commented 4 years ago

Hi @jasminb - appreciate you're likely very busy at the moment; I would really appreciate any historical/contextual insight into the above before I begin debugging the code to figure out a path forward for us. Many thanks for your efforts on this library - it's very valuable. Ben

jasminb commented 4 years ago

Hello @bensullivan, internally same logic that is used to parse primary data is used to parse relationship data and thats why the same rules apply. This should be something that can be fixed/made configurable.

Edit: Please disregard this comment, I did not read your question properly.

jasminb commented 4 years ago

Just tested parsing following payload (on both master and develop):

{
  "data": {
    "type": "engineer",
    "id": "id",
    "relationships": {
      "field": {
        "data": null
      },
      "city": {
        "data": null
      }
    }
  }
}

And it correctly produces the desired type with its id set and other values set to null including relationship objects.