DATAREST-885 - Support array values in JsonPatchPatchConverter.

Original pull request: #226.
This commit is contained in:
Oliver Trosien
2016-09-07 12:48:24 +02:00
committed by Oliver Gierke
parent 06c15d3b6b
commit 365e4376c3
4 changed files with 21 additions and 3 deletions

View File

@@ -34,6 +34,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
* @author Craig Walls
* @author Oliver Gierke
* @author Mathias Düsterhöft
* @author Oliver Trosien
*/
@RequiredArgsConstructor
public class JsonPatchPatchConverter implements PatchConverter<JsonNode> {
@@ -136,10 +137,8 @@ public class JsonPatchPatchConverter implements PatchConverter<JsonNode> {
return valueNode.asInt();
} else if (valueNode.isLong()) {
return valueNode.asLong();
} else if (valueNode.isObject()) {
} else if (valueNode.isObject() || (valueNode.isArray())) {
return new JsonLateObjectEvaluator(mapper, valueNode);
} else if (valueNode.isArray()) {
// TODO: Convert valueNode to array
}
return null;

View File

@@ -19,6 +19,7 @@ import static org.junit.Assert.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
@@ -114,6 +115,17 @@ public class JsonPatchTests {
assertEquals("F", todos.get(5).getDescription());
}
@Test
public void patchArray() throws Exception {
Todo todo = new Todo(1L, "F", false);
Patch patch = readJsonPatch("patch-array.json");
assertEquals(1, patch.size());
Todo patchedTodo = patch.apply(todo, Todo.class);
assertEquals(Arrays.asList("one","two","three"), patchedTodo.getItems());
}
private Patch readJsonPatch(String jsonPatchFile) throws IOException, JsonParseException, JsonMappingException {
ClassPathResource resource = new ClassPathResource(jsonPatchFile, getClass());

View File

@@ -16,6 +16,9 @@
package org.springframework.data.rest.webmvc.json.patch;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -33,6 +36,7 @@ class Todo {
private String description;
private boolean complete;
private TodoType type = new TodoType();
private List<String> items = new ArrayList<String>();
public Todo(Long id, String description, boolean complete) {

View File

@@ -0,0 +1,3 @@
[
{"op":"replace", "path":"/items", "value": ["one","two","three"]}
]