Java “杰克逊注释”;JsonValue";不';行不通
我希望使用apiValue(SUN,MON,…)而不是enum值(SUNDAY,MONDAY,…)对以下枚举进行序列化/反序列化。我使用@JsonValue注释,但它不起作用(即,它使用枚举值)。你知道如何解决这个问题吗Java “杰克逊注释”;JsonValue";不';行不通,java,json,jackson,Java,Json,Jackson,我希望使用apiValue(SUN,MON,…)而不是enum值(SUNDAY,MONDAY,…)对以下枚举进行序列化/反序列化。我使用@JsonValue注释,但它不起作用(即,它使用枚举值)。你知道如何解决这个问题吗 import java.util.*; import com.fasterxml.jackson.annotation.JsonValue; public enum ApiNotificationScheduleDayInWeek { SUNDAY("SUN
import java.util.*;
import com.fasterxml.jackson.annotation.JsonValue;
public enum ApiNotificationScheduleDayInWeek {
SUNDAY("SUN", 1),
MONDAY("MON", 2),
TUESDAY("TUE", 3),
WEDNESDAY("WED", 4),
THURSDAY("THU", 5),
FRIDAY("FRI", 6),
SATURDAY("SAT", 7),
WEEKDAY("WEEKDAY", 8),
WEEKEND("WEEKEND", 9);
private String apiValue;
private Integer intValue;
@JsonValue
public String getApiValue() {
return apiValue;
}
private ApiNotificationScheduleDayInWeek(String apiValue, Integer intValue) {
this.apiValue = apiValue;
this.intValue = intValue;
}
}
您正确地完成了序列化部分,因此出现了其他问题。由于您使用的是Jackson2注释,请验证您使用的是Jackson2进行序列化(而不是Jackson1或任何其他库)。还要进行一般的健全性检查,例如检查是否编译了类、部署了应用程序等 至于反序列化,您还需要告诉Jackson如何从API值获取枚举实例。为此,可以使用
@JsonCreator
注释静态查找方法。例如:
import com.fasterxml.jackson.annotation.JsonCreator;
@JsonCreator
public static ApiNotificationScheduleDayInWeek fromApiValue(String value) {
if (value == null) {
return null;
}
for (ApiNotificationScheduleDayInWeek day : ApiNotificationScheduleDayInWeek.values()) {
if (value.equalsIgnoreCase(day.getApiValue())) {
return day;
}
}
throw new IllegalArgumentException("Invalid API value: " + value);
}
请显示序列化代码。为了使JsonValue工作,我必须有一个注释为JsonCreator的方法吗?不,
@JsonCreator
用于反序列化。序列化应该只使用@JsonValue
。我们在我们的项目中都使用了这两种方法,并且它按预期工作。@ArianHosseinzadeh如果您在这方面仍然有问题,请发布其他详细信息,正如另一条评论中提到的:如何序列化值,包括ObjectMapper的任何配置等。