DATAREST-885 - PatchOperation now evaluates SpEL expression.
Original pull request: #223.
This commit is contained in:
committed by
Oliver Gierke
parent
3643e06b1f
commit
518cab040f
@@ -26,6 +26,7 @@ import org.springframework.expression.ExpressionException;
|
||||
* Abstract base class representing and providing support methods for patch operations.
|
||||
*
|
||||
* @author Craig Walls
|
||||
* @author Mathias Düsterhöft
|
||||
*/
|
||||
public abstract class PatchOperation {
|
||||
|
||||
@@ -164,7 +165,7 @@ public abstract class PatchOperation {
|
||||
* otherwise.
|
||||
*/
|
||||
protected <T> Object evaluateValueFromTarget(Object targetObject, Class<T> entityType) {
|
||||
return value instanceof LateObjectEvaluator ? ((LateObjectEvaluator) value).evaluate(entityType) : value;
|
||||
return value instanceof LateObjectEvaluator ? ((LateObjectEvaluator) value).evaluate(spelExpression.getValueType(targetObject)) : value;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -15,13 +15,17 @@
|
||||
*/
|
||||
package org.springframework.data.rest.webmvc.json.patch;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
public class ReplaceOperationTest {
|
||||
|
||||
@Test
|
||||
@@ -38,6 +42,20 @@ public class ReplaceOperationTest {
|
||||
assertTrue(todos.get(1).isComplete());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void replaceObjectPropertyValue() throws Exception {
|
||||
// initial Todo list
|
||||
Todo todo = new Todo(1L, "A", false);
|
||||
|
||||
ReplaceOperation replace = new ReplaceOperation("/type", new JsonLateObjectEvaluator(new ObjectMapper().readTree("{\"value\":\"new\"}")));
|
||||
replace.perform(todo, Todo.class);
|
||||
|
||||
assertNotNull(todo.getType());
|
||||
assertNotNull(todo.getType().getValue());
|
||||
assertTrue(todo.getType().getValue().equals("new"));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void replaceTextPropertyValue() throws Exception {
|
||||
// initial Todo list
|
||||
|
||||
@@ -16,20 +16,26 @@
|
||||
|
||||
package org.springframework.data.rest.webmvc.json.patch;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author Roy Clarkson
|
||||
* @author Craig Walls
|
||||
* @author Mathias Düsterhöft
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class Todo {
|
||||
|
||||
private Long id;
|
||||
private String description;
|
||||
private boolean complete;
|
||||
private TodoType type = new TodoType();
|
||||
|
||||
public Todo(Long id, String description, boolean complete) {
|
||||
this.id = id;
|
||||
this.description = description;
|
||||
this.complete = complete;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.springframework.data.rest.webmvc.json.patch;
|
||||
|
||||
import javax.persistence.Embeddable;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author Mathias Düsterhöft
|
||||
*/
|
||||
@Embeddable
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class TodoType {
|
||||
private String value = "none";
|
||||
}
|
||||
Reference in New Issue
Block a user