相关疑难解决方法(0)

使用Jackson ObjectMapper和Java 8可选值

我试图使用Jackson将类值写入JSON,其中包含Optional作为字段:

public class Test {
    Optional<String> field = Optional.of("hello, world!");

    public Optional<String> getField() {
        return field;
    }

    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        System.out.println(mapper.writeValueAsString(new Test()));
    }
}
Run Code Online (Sandbox Code Playgroud)

执行时,此类生成以下输出:

{"field":{"present":true}}
Run Code Online (Sandbox Code Playgroud)

我理解当前/不存在的字段被包含在内并且可以在读取JSON数据时解决它,但是我无法解决可选的实际内容永远不会写入输出的事实.:(

除了不使用ObjectMapper之外,这里有任何变通方法吗?

java jackson java-8

50
推荐指数
5
解决办法
4万
查看次数

如何在Jackson中为泛型类型创建自定义反序列化器?

想象一下以下场景:

class <T> Foo<T> {
    ....
}

class Bar {
    Foo<Something> foo;
}
Run Code Online (Sandbox Code Playgroud)

我想为Foo编写一个自定义Jackson解串器.为了做到这一点(例如,为了反序列化Bar具有类Foo<Something>属性),我需要知道具体类型的Foo<T>,在使用Bar,在反序列化时间(比如我需要知道TSomething在particluar情况下).

如何编写这样的解串器?应该可以这样做,因为杰克逊用类型集合和地图来做.

澄清:

似乎有2个部分来解决问题:

1)获取foo内部声明的属性类型Bar并使用它来反序列化Foo<Somehting>

2)在反序列化时找出我们正在对foo类内的属性进行反序列化Bar以便成功完成步骤1)

如何完成1和2?

java generics json jackson deserialization

15
推荐指数
2
解决办法
2万
查看次数

标签 统计

jackson ×2

java ×2

deserialization ×1

generics ×1

java-8 ×1

json ×1