2016-11-09 21 views
0

我JSON数据如下图所示:地图JSON数据的Spring数据JPA与杰克逊注释预期值

{ 
    "data":[ 
    {"val":"1"}, 
    {"val":"2"}, 
    {"val":"3"} 
    ] 
} 

但我希望这样的事情

{ 
    "data":[ 
    {"val":"Red"}, 
    {"val":"Green"}, 
    {"val":"Blue"} 
    ] 
} 


@Column(name = "colorname") 
@JsonProperty("val") 
String colorName; 

有什么杰克逊注解将这些数字映射到colorNames,同时转换为Pojos?或者有什么更好的方法来获得预期的结果?

+1

为此,你需要定义你的定制序列。请看看http://stackoverflow.com/questions/34297506/how-can-i-serialiize-deserialize-a-boolean-value-from-fasterxml-jackson-as-an-in –

+1

使用自定义解串器或自定义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 { 
    //.... 
} 

最后,您必须在colorName类型属性更改为Color枚举类型,而不是字符串和注释为Enumarted序式(JPA)

@Enumerated(EnumType.ORDINAL) 
Color color; 
+0

感谢Pau的评论。我需要一个反序列化器来从JSON中获取值。但现在已经解决了。 – FlintOff