spring-projects / spring-projects/spring-data-rest
PUT creates new DynamoDB entity when hash/range key are specified in body [DATAREST-1025]
@odrotbohm is already working on this.
Since Dec 31, 2020.
- Dominant language
- Java
- Stars
- 958
- Forks
- 568
- PR merge metrics
- No merged PRs in 30d
Description
Ryon Day opened DATAREST-1025 and commented
I use Spring-Data-DynamoDB and have been updating dependencies.
I have an org.springframework.core.convert.converter.Converter registered to be able to reference my DynamoDB entities from Spring-Data-Rest using their hash/range keys, so:
http://service/foo/hash-range will get the DynamoDB entity with hash and range keys hash and range. This integrates well with Spring-data-rest and the AWS API which uses composite key objects.
@Component
public class StringToFooIdConverter implements Converter<String, FooId> {
// Conversion
}
Let's say that bar and baz fields are the hash and range key properties for the Foo object.
This means that we create a new entity by
{
"bar": "qux",
"baz": "garple",
"some_other_thing": "quux"
}
And then we get the same entity with
{
"bar": "qux",
"baz": "garple",
"some_other_thing": "quux"
}
Cool! We also need to be able to PUT to replace. This is where the problem comes in.
Spring-Data-REST 2.4.4.RELEASE
Request
{
"bar": "qux2",
"baz": "garple2",
"some_other_thing": "quux2"
}
Response
{
"bar": "qux",
"baz": "garple",
"some_other_thing": "quux2"
}
Cool! It recognized that since this is a key/value store, you'd actually be changing the id, so it did not do it!
Request
{
"some_other_thing": "quux3"
}
Response
{
"bar": "qux",
"baz": "garple",
"some_other_thing": "quux2"
}
Cool! since the key was specified on the URL, it got it, updated the record, and returned the whole thing! Works like a champ.
Spring-Data-REST 2.6.1.RELEASE
Request
{
"bar": "qux2",
"baz": "garple2",
"some_other_thing": "quux2"
}
Response
{
"bar": "qux2",
"baz": "garple2",
"some_other_thing": "quux2"
}
Oh dear! It created a NEW record, and the old one still exists too! It did not respect that the attributes were keys!
Request
{
"some_other_thing": "quux3"
}
Response
{
"error": "invalid_request",
"error_description": "Message not readable"
}
Oh dear! It would seem that there is some weirdness here, because it tries to create a new object (or something) and cannot do so.
Desired State
This functionality should be the same as Spring-Data-Rest 2.4.4.RELEASE
Affects: 2.6.1 (Ingalls SR1), 2.5.8 (Hopper SR8)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.