杰克逊注册自定义json序列化器

时间:2017-11-22 19:46:06

标签: java json jackson jackson-modules jackson-databind

这是我自定义的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());

1 个答案:

答案 0 :(得分:2)

这是一个问题,因为使用import docker client = docker.from_env() stdout = client.containers.run(image="xxxx/pyrisk:latest",command="python prices.py", remove=True) 这是一种原始类型,而这种情况需要泛型。您可以按照文档中的建议在StdSerializer上基于自定义序列化程序来解决此问题。保持HashMap方法不变,但使用如下构造函数定义序列化程序:

serialize

然后到创建适当class MaptoListSerializer extends StdSerializer<Map<String, Car<?, ?>>> { MaptoListSerializer(JavaType type) { super(type); } 的重要位,并将其传递给此构造函数:

JavaType