java Jackson:(反)序列化程序和StdConverter之间有什么区别?
大多数时候,当我需要一些自定义类型处理时,我使用Json(De)serializer<>
但是有些教程,比如this one正在使用StdConverter<>
以下各项的典型用例是什么:
Std(De)Serializer
Json(De)Serializer
StdConverter
李>
你可以在下面搜索框中键入要查询的问题!
大多数时候,当我需要一些自定义类型处理时,我使用Json(De)serializer<>
但是有些教程,比如this one正在使用StdConverter<>
以下各项的典型用例是什么:
Std(De)Serializer
Json(De)Serializer
StdConverter
李>
# 1 楼答案
#对象图的标准序列化
让我们定义两个简单的实体,看看Jackson如何在没有任何自定义逻辑的情况下序列化这些实体:
现在,让我们用一个用户实体序列化一个条目实体:
这将导致两个实体的完整JSON表示:
#ObjectMapper上的自定义序列化程序
现在,让我们简化上面的JSON输出,只序列化用户id,而不是整个用户对象;我们希望得到以下更简单的JSON:
简单地说,我们必须为项对象定义一个自定义序列化程序:
现在,我们需要向Item类的ObjectMapper注册这个自定义序列化程序,并执行序列化:
就是这样——我们现在有了一个更简单的自定义JSON序列化项->;用户实体
#类上的自定义序列化程序
我们还可以直接在类上注册序列化程序,而不是在ObjectMapper上注册:
现在,在执行标准序列化时:
我们将通过@JsonSerialize获得由序列化程序创建的自定义JSON输出:
当无法直接访问和配置ObjectMapper时,这非常有用