package gson; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import org.junit.Before; import org.junit.Test; import java.lang.reflect.Type; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; public class WrapStringInDto_Test { public static class StringWrapper { public final String value; public StringWrapper(String value) { this.value = value; } } public static class ToSerialize { private StringWrapper member = new StringWrapper("47"); public StringWrapper getMember(){ return member; } } public static class MyTypeAdapter implements JsonSerializer<StringWrapper>, JsonDeserializer<StringWrapper> { @Override public JsonElement serialize(StringWrapper src, Type typeOfSrc, JsonSerializationContext context) { return new JsonPrimitive(src.value); } @Override public StringWrapper deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { return new StringWrapper(json.getAsString()); } } private GsonBuilder builder = new GsonBuilder(); private Gson gson; @Before public void setUp() throws Exception { builder.registerTypeAdapter(StringWrapper.class, new MyTypeAdapter()); gson = builder.create(); } @Test public void deSerializeWrappedStringAsSimpleValue() throws Exception { String gsonString = gson.toJson(new ToSerialize()); assertThat(gsonString, is("{\"member\":\"47\"}")); } @Test public void wrapSimpleStringWithStringWrapper() throws Exception { String json = "{member:49}"; ToSerialize deSerialized = gson.fromJson(json, ToSerialize.class); assertThat(deSerialized.getMember().value, is("49")); } }