是否可能:在类中有一个字段,而在Jackson库中进行序列化/反序列化时却为其使用不同的名称?
例如,我有“ Coordiantes”类。
class Coordinates{ int red; }
对于从JSON反序列化,希望具有以下格式:
{ "red":12 }
但是当我序列化对象时,结果应该是这样的:
{ "r":12 }
我试图通过@JsonProperty在getter和setter上都应用注释(具有不同的值)来实现此目的:
@JsonProperty
class Coordiantes{ int red; @JsonProperty("r") public byte getRed() { return red; } @JsonProperty("red") public void setRed(byte red) { this.red = red; } }
但我有一个例外:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段“红色”
刚刚测试,这有效:
public class Coordinates { byte red; @JsonProperty("r") public byte getR() { return red; } @JsonProperty("red") public void setRed(byte red) { this.red = red; } }
这个想法是方法名称应该不同,所以杰克逊将其解析为不同的字段,而不是一个字段。
这是测试代码:
Coordinates c = new Coordinates(); c.setRed((byte) 5); ObjectMapper mapper = new ObjectMapper(); System.out.println("Serialization: " + mapper.writeValueAsString(c)); Coordinates r = mapper.readValue("{\"red\":25}",Coordinates.class); System.out.println("Deserialization: " + r.getR());
结果:
Serialization: {"r":5} Deserialization: 25