Browse Source

`null` should be mapped to `null` (fixes #351)

pull/368/head
Jochen Berger 7 years ago
parent
commit
78befbb5ee
  1. 6
      json-path/src/main/java/com/jayway/jsonpath/spi/mapper/GsonMappingProvider.java
  2. 21
      json-path/src/test/java/com/jayway/jsonpath/GsonJsonProviderTest.java

6
json-path/src/main/java/com/jayway/jsonpath/spi/mapper/GsonMappingProvider.java

@ -62,6 +62,9 @@ public class GsonMappingProvider implements MappingProvider {
@Override @Override
public <T> T map(Object source, Class<T> targetType, Configuration configuration) { public <T> T map(Object source, Class<T> targetType, Configuration configuration) {
if(source == null){
return null;
}
try { try {
return factory.call().getAdapter(targetType).fromJsonTree((JsonElement) source); return factory.call().getAdapter(targetType).fromJsonTree((JsonElement) source);
} catch (Exception e){ } catch (Exception e){
@ -71,6 +74,9 @@ public class GsonMappingProvider implements MappingProvider {
@Override @Override
public <T> T map(Object source, TypeRef<T> targetType, Configuration configuration) { public <T> T map(Object source, TypeRef<T> targetType, Configuration configuration) {
if(source == null){
return null;
}
try { try {
return (T) factory.call().getAdapter(TypeToken.get(targetType.getType())).fromJsonTree((JsonElement) source); return (T) factory.call().getAdapter(TypeToken.get(targetType.getType())).fromJsonTree((JsonElement) source);
} catch (Exception e){ } catch (Exception e){

21
json-path/src/test/java/com/jayway/jsonpath/GsonJsonProviderTest.java

@ -3,6 +3,8 @@ package com.jayway.jsonpath;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.jayway.jsonpath.spi.json.GsonJsonProvider;
import com.jayway.jsonpath.spi.mapper.GsonMappingProvider;
import com.jayway.jsonpath.spi.mapper.MappingException; import com.jayway.jsonpath.spi.mapper.MappingException;
import org.junit.Test; import org.junit.Test;
@ -182,6 +184,25 @@ public class GsonJsonProviderTest extends BaseTest {
using(GSON_CONFIGURATION).parse(JSON).read("$", typeRef); using(GSON_CONFIGURATION).parse(JSON).read("$", typeRef);
} }
@Test
// https://github.com/json-path/JsonPath/issues/351
public void no_error_when_mapping_null() throws IOException {
Configuration configuration = Configuration
.builder()
.mappingProvider(new GsonMappingProvider())
.jsonProvider(new GsonJsonProvider())
.options(Option.DEFAULT_PATH_LEAF_TO_NULL, Option.SUPPRESS_EXCEPTIONS)
.build();
String json = "{\"M\":[]}";
String result = JsonPath.using(configuration).parse(json).read("$.M[0].A[0]", String.class);
assertThat(result).isNull();
}
public static class FooBarBaz<T> { public static class FooBarBaz<T> {
public T gen; public T gen;
public String foo; public String foo;

Loading…
Cancel
Save