Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “杰克逊注释”;JsonValue";不';行不通_Java_Json_Jackson - Fatal编程技术网

Java “杰克逊注释”;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

我希望使用apiValue(SUN,MON,…)而不是enum值(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);
}

请显示序列化代码。为了使JsonValue工作,我必须有一个注释为JsonCreator的方法吗?不,
@JsonCreator
用于反序列化。序列化应该只使用
@JsonValue
。我们在我们的项目中都使用了这两种方法,并且它按预期工作。@ArianHosseinzadeh如果您在这方面仍然有问题,请发布其他详细信息,正如另一条评论中提到的:如何序列化值,包括ObjectMapper的任何配置等。