检索枚举中设置的@JsonProperty值

时间:2018-04-24 21:19:50

标签: java json serialization enums jackson

如何检索@JsonProperty注释中设置的值?

我希望能够测试REST端点的JSON值。我想使用现有的枚举而不是硬编码字符串。我似乎无法弄清楚如何在@JsonProperty注释中获取值集。

import com.fasterxml.jackson.annotation.JsonProperty;

public enum StatusType {
    @JsonProperty("unknown")
    UNKNOWN,
    @JsonProperty("warning")
    WARNING,
    @JsonProperty("success")
    SUCCESS,
    @JsonProperty("error")
    ERROR,
    @JsonProperty("info")
    INFO
}

理想情况下,我想做的事情如下:

 mvc.perform(get("/status"))
            .andExpect(jsonPath("status").value(StatusType.INFO))

1 个答案:

答案 0 :(得分:4)

您可以使用以下内容(不要忘记处理例外情况):

String value = StatusType.class.getField(StatusType.INFO.name()) 
                         .getAnnotation(JsonProperty.class).value();

或者,根据您的需要,您可以使用@JsonValue按如下方式定义枚举:

public enum StatusType {

    UNKNOWN("unknown"),
    WARNING("warning"),
    SUCCESS("success"),
    ERROR("error"),
    INFO("info");

    private String value;

    StatusType(String value) {
        this.value = value;
    }

    @JsonValue
    public String getValue() {
        return value;
    }
}

然后你可以使用:

String value = StatusType.INFO.getValue();