有没有一种方法可以使用JacksonJSON处理器来进行自定义字段级别的序列化?例如,我想让类
public class Person {
public String name;
public int age;
public int favoriteNumber;
}
字符串
序列化为以下JSON:
{ "name": "Joe", "age": 25, "favoriteNumber": "123" }
型
请注意,age=25被编码为number,而favoriteNumber=123被编码为string。开箱即用Jackson将int
编组为一个数字。在本例中,我希望favoriteNumber被编码为字符串。
8条答案
按热度按时间lb3vh1jj1#
可以按如下方式实现自定义序列化程序:
字符串
Java应该为您处理从
int
到Integer
的自动装箱。odopli942#
Jackson-databind(至少2.1.3)提供特殊的
ToStringSerializer
(com.fasterxml.jackson.databind.ser.std.ToStringSerializer
)范例:
字符串
2mbi3lxu3#
如果你不想用注解污染你的模型,而想执行一些自定义操作,你可以使用mixin。
字符串
Package :
型
做任何你需要的年龄:
型
2q5ifsrm4#
jackson-annotations提供了
@JsonFormat
,它可以处理大量的定制,而不需要编写定制的序列化程序。例如,为数值类型的字段请求
STRING
形状将以字符串形式输出数值字符串
将产生所需的输出
型
c9x0cxw05#
为
favoriteNumber
字段添加一个@JsonProperty
注解的getter,它返回一个String
:字符串
7uhlpewt6#
在**@JsonView**的帮助下,我们可以决定要序列化的模型类的字段,这些字段满足最低标准(我们必须定义标准),比如我们可以有一个具有10个属性的核心类,但只有5个属性可以序列化,这是客户端所需的
通过简单地创建以下类来定义我们的视图:
字符串
带视图的注解模型类:
型
现在,我们必须编写自定义的json转换器,只需从spring扩展HttpMessageConverter类:
型
现在需要告诉spring使用这个自定义的json转换,只需将其放在dispatcher-servlet.xml中即可
型
这就是你如何能够决定哪些字段得到序列化。
rekjcdws7#
你可以在mixin中内联创建一个自定义的序列化器。然后用它注解一个字段。请参阅下面的例子,它将“- something else“附加到lang字段。这有点 * 黑客 * -如果你的序列化器需要像仓库或Spring注入的任何东西,这将是一个问题。可能最好使用自定义的序列化器/序列化器而不是mixin。
字符串
jdzmm42g8#
我最终将两个答案结合起来(并使用ToStringSerializer提供的实现)
POJO:
字符串
串行化器:
型