如果您不使用 ,则 Jackson 将使用 setter 和 getter 方法来设置字段。@JsonCreator
因此,如果您定义以下方法,假设您有 和 枚举:Sex
Gender
@JsonProperty("sex")
public void setSex(final Sex sex) {
this.sex = sex;
if (gender == null) {
gender = (sex == Sex.WOMAN) ? Gender.WOMAN : Gender.MAN;
}
}
@JsonProperty("gender")
public void setGender(final Gender gender) {
this.gender = gender;
if (sex == null) {
sex = (gender == Gender.WOMAN) ? Sex.WOMAN : Sex.MAN;
}
}
它会工作。
更新:您可以在此处找到杰克逊图书馆的所有注释。
更新2:其他解决方案:
class Example {
private final Sex sex;
private final Gender gender;
@JsonCreator
public Example(@JsonProperty("sex") final Sex sex) {
super();
this.sex = sex;
this.gender = getGenderBySex(sex)
}
@JsonFactory
public static Example createExample(@JsonProperty("gender") final Gender gender) {
return new Example(getSexByGender(gender));
}
private static Sex getSexByGender(final Gender) {
return (gender == Gender.WOMAN) ? Sex.WOMAN : Sex.MAN;
}
private static Gender getGenderBySex(final Sex) {
return (sex == Sex.WOMAN) ? Gender.WOMAN : Gender.MAN;
}
}