diff --git a/json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java b/json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java index 0ec15320..8e525c08 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java +++ b/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)); } } diff --git a/json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java b/json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java index 09401682..8476b5e2 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java +++ b/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 { 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; + } + } }