Damith是正确的,你似乎不能够标记同一类中的两种方法,但有是解决此问题的方法:
首先,你必须创建一个自定义解串器(或序列化程序,取决于您的偏好)。
我的例子中的物体:
@JsonDeserialize(using = ObjectDeserializer.class)
public class MyObject {
private String name;
public void setName(String name) {
this.name = name;
}
@JsonProperty("SomeOtherName")
public String getName() {
return name;
}
}
注意,我迎来吸气剂与第一名称的属性。我给这个班定制了一个解串器。它看起来像:
public class ObjectDeserializer extends JsonDeserializer<MyObject> {
@Override
public MyObject deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
MyObject object = new MyObject();
JsonNode node = jp.getCodec().readTree(jp);
JsonNode jsonNode = node.get("MyCustomSerializeName");
object.setName(jsonNode.getTextValue());
return object;
}
}
该类将创建我的自定义对象并获取二传手场描述的名称(而不是依赖于属性名)。
放在一起,我得到:
public class DeserializeTest {
public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
MyObject o = new MyObject();
o.setName("Hello");
String writeValueAsString = mapper.writeValueAsString(o);
System.out.println(writeValueAsString);
String jsonObj = "{\"MyCustomSerializeName\":\"Other Test\"}";
MyObject readValue = mapper.readValue(jsonObj, MyObject.class);
System.out.println(readValue.getName());
}
}
而这种输出:
{"SomeOtherName":"Hello"}
Other Test
我希望帮助你。
总是提供例外。 – beerbajay