Jackson如何反序列化Java14中的record类型?
Java14近日发布,其中引入了新的record类型,虽然这是个预览特性,但是也不妨碍我们尝试下。
record类型
record类型和普通的类相比,有几个特点
- 每个字段都是
private final
的,类本身是final
的 - 类只有一个所有传递所有参数的构造函数
- 每个字段会自动会有一个get方法,但是方法名和字段名一致(没有get前缀)
- 可以给字段添加注解,支持FIELD、METHOD和PARAMETER(如果一个注解是FIELD、METHOD和PARAMETER的,那么注解会在字段、get方法和构造函数参数上同时出现)
toString
、equals
、hashCode
方法都是自带的
这几个特点决定了这个非常适合做DO(Model),DTO(比如RPC中定义的各种entity,http返回的json)。
由于业务中经常用到jackson来序列化反序列化对象,今天我们就来试一试jackson对record类型的支持。
如何使用jackson反序列化record对象
如果我们按照原来的方式来反序列化record(如果字段上没有@JsonProperty
注解的话),会直接报错:InvalidDefinitionException: Cannot construct instance of Person (no Creators, like default construct, exist)
这是因为jackson没法找到构造函数和字段的映射,所以我们自己指定默认的映射:
1 | // from https://gist.github.com/youribonnaffe/03176be516c0ed06828ccc7d6c1724ce |