簡體   English   中英

傑克遜注釋“JsonValue”不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM