[英]Jackson annotation "JsonValue" doesn't work
我希望使用 apiValue (SUN, MON, ...) 而不是枚舉值 (SUNDAY, MONDAY, ....) 序列化/反序列化以下枚舉。 我使用@JsonValue 注釋但它不起作用(即它使用枚舉值)。 知道如何解決這個問題嗎?
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.