2014-05-14 9 views
8

Gson의 fromJson 메서드를 사용할 때 주어진 클래스의 집합 메서드가 사용되는 방식이 있습니까?Gson이 JSON을 비 직렬화 할 때 setter를 사용할 수 있습니까?

모든 String 대상 클래스의 전역 변수가 트림되기 때문에이 작업을 수행하고 싶습니다.

GSON API 주석이 있습니까?

GSON은 사용자 지정 serializer/deserializers를 작성할 수있는 기능을 제공하지만 다른 방법이 있는지 알고 싶습니다.

답변

1

JsonDeserializer<String>을 구현하여 GsonBuilder에 등록했습니다. 그래서,받은 모든 문자열 필드에 Gson은 내 StringGsonTypeAdapter을 사용하여 값을 비 직렬화합니다.

import static net.hugonardo.java.commons.text.StringUtils.normalizeSpace; 
import static net.hugonardo.java.commons.text.StringUtils.trimToNull; 

final class StringGsonTypeAdapter implements JsonDeserializer<String> { 

    private static final StringGsonTypeAdapter INSTANCE = new StringGsonTypeAdapter(); 

    static StringGsonTypeAdapter instance() { 
     return INSTANCE; 
    } 

    @Override 
    public String deserialize(JsonElement jsonElement, Type type, 
     JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { 
     return normalizeSpace(trimToNull(jsonElement.getAsString())); 
    } 
} 

... 그리고 내 GsonBuilder :

Gson gson = new GsonBuilder() 
    .registerTypeAdapter(String.class, StringGsonTypeAdapter.instance()) 
    .create()) 
다음

내 코드입니다
13

아니요은 없습니다. Gson은 주로 인스턴스 필드에 대한 반향으로 작동합니다. 따라서이 기능이있는 Jackson으로 이동하지 않으려는 경우 일반 설정자에게 전화 할 수는 없습니다. 그래서 그것에 대한 주석이 없습니다.

하지만

당신이 할 수 필요가 특정을 달성하기 위해 : 당신은 트림 및 사용자 정의를 작성하려는 문자열을 가진 생성자를 만들 사용자 정의

  1. 작성 TypeAdapter 또는
  2. InstanceCreator 또는
  3. JSON을 JsonObject으로 구문 분석하고 문자열을 처리 한 다음 해당 개체를 int 구문 분석의 원본으로 사용합니다. 너의 수업.

일부 코드를 게시하거나 데이터/JSON에 대한 정보를 제공하는 한 더 많은 힌트를 제공 할 수 있습니다.

관련 문제