2016-05-27 16 views
-3

enum値(SUNDAY、MONDAY、....)ではなく、apiValue(SUN、MON、...)を使用して次のenumをシリアル化/逆シリアル化します。 @JsonValueアノテーションを使用しますが、機能しません(つまり、enum値が使用されます)。どのようにこの問題を解決するためのアイデア?ジャクソンの注釈 "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; 
    } 

} 
+0

シリアル化コードを示してください。 [MCVE]。 –

答えて

0

シリアル化部分を正しく実行しているため、何か間違っています。 Jackson2アノテーションを使用しているので、Jackson1やその他のライブラリではなく、直列化にJackson2を使用していることを確認してください。

デシリアライズについては、API値からenumインスタンスを取得する方法をジャクソンに伝える必要もあります。このために、@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); 
} 
+0

JsonValueを動作させるために、JsonCreatorとして注釈を付けたメソッドを用意しなければなりませんか? –

+0

いいえ、 '@ JsonCreator'はデシリアライズ用です。シリアライゼーションは '@JsonValue'だけで動作します。我々は両方のプロジェクトで使用し、期待どおりに動作します。 –

+0

@ArianHosseinzadehこれでも問題が解決しない場合は、ObjectMapperなどの設定を含めて、値をシリアル化する方法を説明しています。 –

関連する問題