2017-11-22 20 views
2

이것은 내 사용자 정의 JSON Serializer이며이를 모듈로 등록하려고합니다. 여기까지 내가 지금까지 가지고있는 것이있다.Jackson 등록 사용자 정의 json serializer

public class MaptoListSerializer extends JsonSerializer<Map<String, Car<?, ?>>> { 

     @Override 
     public void serialize(Map<String, Car<?, ?>> value, JsonGenerator gen, SerializerProvider serializers)throws IOException, JsonProcessingException { 
      gen.writeObject(value.values()); 
     } 
} 

는 여기에 내가 (는 직렬를 추가 할 수없는 것) 만들어 내 모듈 클래스입니다. 여기

public class CustomModule extends SimpleModule { 

private static final long serialVersionUID = -9105685985325373621L; 

public CustomModule() { 
    super("CustomModule"); 
} 

@Override 
public void setupModule(SetupContext context) { 
    SimpleSerializers serializers = new SimpleSerializers(); 

    //THIS DOESN'T WORK . HOW DO I ADD THE SERIALIZER? 
    serializers.addSerializer(HashMap.class, new MaptoListSerializer()); 

    context.addSerializers(serializers); 
} 
} 

은 ( 작동)

mapper = new ObjectMapper(); 
mapper.registerModule(new CustomModule()); 
+0

당신에게 수 또한 Jackson의 ObjectMapper를 어떻게 호출하는지 게시 하시겠습니까? –

+0

@NickDeFazio 게시물에 추가되었습니다! 감사합니다 – user3100209

답변

1

이 때문에이 경우 제네릭을 요구하면서 HashMap, 원시 타입을 사용하여 문제가되는 개체 매퍼가 사용하는 방법입니다. 문서에서 권장하는대로 사용자 정의 직렬 변환기를 StdSerializer에 기초하여이를 해결할 수 있습니다. 그것이로 serialize 방법을 유지하지만,이 같은 생성자와 시리얼을 정의

class MaptoListSerializer extends StdSerializer<Map<String, Car<?, ?>>> { 
    MaptoListSerializer(JavaType type) { 
     super(type); 
    } 

그런 다음 적절한 JavaType를 생성하고이 생성자에 전달 중요한 비트 :

MapType type = context.getTypeFactory() 
    .constructMapType(HashMap.class, String.class, Car.class); 
serializers.addSerializer(new MaptoListSerializer(type)); 

context.addSerializers(serializers); 
+0

당신은 디시리얼라이저를 어떻게 할 것입니까? 확장 된 StdDeserializer와 동일하게 수행했지만 .... 이제는 Deserizlier에 추가 할 확실한 이유가 없습니다 ... – user3100209

+0

사용자 정의 직렬 변환기는'Map'의'Car' 값에서 JSON 배열을 생성합니다. 이것을'List '리스트에 deserialize하기를 원합니까? 이 경우 내 힌트 :'JavaType type = context.constructCollectionType (List.class, Car.class); 그리고'deserializers.addDeserializer (List.class, new MaptoListDeserializer (type));' –

+0

미안하지만 ListToMapDeserializer – user3100209