Field path handling makes no distinction between a.[] and a

Open
#627 2 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
java
Domain
api

Research direction

Start with JsonContentHandler.resolveFieldType and the FieldDescriptor paths used in the two tests, comparing a with a.[]. Confirm the intended distinction for array contents and root arrays, then update the tests and behavior to establish the chosen root-path syntax while preserving the expected compatibility decision.

Written by the indexing model from the issue text.

Description

type: bug

In working on #626, it has become apparent that the lack of distinction that is made between a.[] and a is problematic. It's a subtle difference, but the former should locate the contents of the array at a, whereas the latter should locate the array itself.

The following tests illustrate the problem:

@Test
public void typeForArrayWithMixedContents() {
	Object fieldType = new JsonContentHandler("{\"a\": [\"five\", 5]}".getBytes())
			.resolveFieldType(new FieldDescriptor("a"));
	assertThat(fieldType).isEqualTo(JsonFieldType.ARRAY);
}

@Test
public void typeForContentsOfArrayWithMixedContents() {
	Object fieldType = new JsonContentHandler("{\"a\": [\"five\", 5]}".getBytes())
			.resolveFieldType(new FieldDescriptor("a.[]"));
	assertThat(fieldType).isEqualTo(JsonFieldType.VARIES);
}

The first test passes but the second test fails. It fails because the resolved type is ARRAY rather than VARIES.

When a payload is an array at the top level, [] is currently used to locate that array. To correct the behaviour of the test above, it would change to locating the contents of the array. This change would require the introduction of another syntax that identifies the root of the payload. An empty path is one option, another would be $. The latter would align with JSON path which uses $ to refer to the root element.

While the current behaviour is a bug, fixing it will be a breaking change for some so a balance needs to be struck. Waiting until 2.1 feels like the best approach at the moment.

Dominant language
Java
Stars
1.2k
Forks
731
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from spring-projects/spring-restdocs

All issues in spring-projects/spring-restdocs

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.