Browse Source

fix setting a POJO as a value using JacksonJsonNodeJsonProvider (fixes #364)

pull/370/head
Jochen Berger 7 years ago
parent
commit
a71023c650
  1. 2
      json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java
  2. 23
      json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java

2
json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java

@ -270,7 +270,7 @@ public class JacksonJsonNodeJsonProvider extends AbstractJsonProvider {
} else if (value == null) {
objectNode.set(key.toString(), null); // this will create a null-node
} else {
throw new IllegalArgumentException("Cannot handle object type: " + value.getClass().getName());
objectNode.put(key.toString(), createJsonElement(value));
}
}

23
json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java

@ -1,5 +1,7 @@
package com.jayway.jsonpath;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
@ -9,6 +11,7 @@ import org.junit.Test;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import static com.jayway.jsonpath.JsonPath.using;
import static org.assertj.core.api.Assertions.assertThat;
@ -109,6 +112,16 @@ public class JacksonJsonNodeJsonProviderTest extends BaseTest {
using(JACKSON_JSON_NODE_CONFIGURATION).parse(JSON).read("$", typeRef);
}
@Test
// https://github.com/json-path/JsonPath/issues/364
public void setPropertyWithPOJO() {
DocumentContext context = JsonPath.using(JACKSON_JSON_NODE_CONFIGURATION).parse("{}");
UUID uuid = UUID.randomUUID();
context.put("$", "data", new Data(uuid));
String id = context.read("$.data.id", String.class);
assertThat(id).isEqualTo(uuid.toString());
}
public static class FooBarBaz<T> {
public T gen;
@ -121,5 +134,15 @@ public class JacksonJsonNodeJsonProviderTest extends BaseTest {
public static class Gen {
public String eric;
}
public static final class Data {
@JsonProperty("id")
UUID id;
@JsonCreator
Data(@JsonProperty("id") final UUID id) {
this.id = id;
}
}
}

Loading…
Cancel
Save