Java Jackson从SerializerProvider查找/创建类的序列化程序

Java Jackson从SerializerProvider查找/创建类的序列化程序,java,serialization,jackson,Java,Serialization,Jackson,我正在使用Spring4和Jackson 2.3。 我为可选包装器编写了一个自定义JsonSerializer。 情况如下: @Override public void serialize(Optional optional, com.fasterxml.jackson.core.JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingExcepti

我正在使用Spring4和Jackson 2.3。 我为可选包装器编写了一个自定义JsonSerializer。 情况如下:

@Override
public void serialize(Optional optional, com.fasterxml.jackson.core.JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
    if(optional.isPresent()){
        Object o = optional.get();
        Class<?> aClass = o.getClass();
        DefaultSerializerProvider.Impl sp = new DefaultSerializerProvider.Impl();

        // Cant find proper Serializer
        JsonSerializer<Object> serializer = sp.getUnknownTypeSerializer(aClass);

        serializer.serialize(o, jsonGenerator, serializerProvider);
    }else throw new EmptyException("Empty Option");
}
我的问题是为可选值(如果存在)获取适当的序列化程序,因此问题是如何从SerializerProvider获取POJO序列化程序

我现在的Pojo看起来:

@XmlRootElement
public class User {

private UUID uid;

private boolean valid;

private List<String> gids;

所以没有特别的奖励

在你的POJO课程中,哪些是可选的?你能举一个小例子吗,你在哪里有选择,你想做什么?我猜你展示的那个例子不起作用,是吗?它不起作用,对吧。可选的是可为空的值包装。如果是空的,我想抛出一个EmptyException。如果没有,我想为里面的对象找到共同响应的Jackson转换器,让Jackson序列化。好的,我明白了。但是我看不出在你的POJO类中有哪些是可选的。为什么要序列化它?在传递要序列化的对象之前,是否可以选中optional.isPresent?您可以添加一个示例吗?您想做什么?我通过Dao从每个Db请求中获取一个可选对象,所以我想在涉及serialisatzion时将其删除,可能太晚了。你知道我怎么在Jackson拦截目标之前拦截吗?因此我在调用optional.get时返回了我想要序列化的对象。