使用 Jackson Annotation 将 json 数据映射到 Spring Data JPA 中的预期值
Posted
技术标签:
【中文标题】使用 Jackson Annotation 将 json 数据映射到 Spring Data JPA 中的预期值【英文标题】:Map json data to expected values in Spring Data JPA with Jackson Annotation 【发布时间】:2017-03-22 21:17:17 【问题描述】:我有如下 json 数据:
"data":[
"val":"1",
"val":"2",
"val":"3"
]
但我期待这样的事情
"data":[
"val":"Red",
"val":"Green",
"val":"Blue"
]
@Column(name = "colorname")
@JsonProperty("val")
String colorName;
在转换为 Pojos 时,是否有任何 Jackson 注释将这些数字映射到 colorNames?或者有什么更好的方法来获得预期的结果?
【问题讨论】:
为此,您需要定义您的自定义序列化程序。请看***.com/questions/34297506/… 使用自定义反序列化器或自定义 setColorName() 方法 【参考方案1】:你可以像下一个一样创建一个序数枚举:
public enum Color
Green,
Blue,
Red
//and so on
然后你需要一个自定义的反序列化器,你只需要执行类似下一个的操作(指定field name
为键,writeString
为颜色值):
public class ColorSerializer extends StdSerializer<Color>
public ColorSerializer()
this(null);
public ColorSerializer(Class<Color> t)
super(t);
public void serialize(Color value, JsonGenerator gen, SerializerProvider provider)
throws IOException, JsonProcessingException
gen.writeStartObject();
gen.writeFieldName("val");
gen.writeString(value.toString());
gen.writeEndObject();
您必须使用注解@JsonSerialize
指定在您的枚举中使用此序列化程序,颜色枚举为下一个:
@JsonSerialize(using = ColorSerializer.class)
public enum Color
//....
最后,您必须将 typecolorName
属性更改为 Color
枚举类型而不是 String 并注释为 Enumarted Ordinal 类型 (JPA)
@Enumerated(EnumType.ORDINAL)
Color color;
【讨论】:
感谢 Pau 的评论。我需要一个反序列化器来从 JSON 中获取值。但现在已经解决了。以上是关于使用 Jackson Annotation 将 json 数据映射到 Spring Data JPA 中的预期值的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonInclude$Value
练习:将值是null的数据删除掉(剔除):com.fasterxml.jackson.annotation.JsonInclude;包