Jackson 的 @JsonProperty 的枚举

hts*_*ame 3 java enums json jackson

假设我有一个枚举:

public enum ParameterList {
    FREQUENCY_ID("500");
    ...
    lot's of different constants here
    ...

    private final String param;

    ParameterList(String param) {
        this.param = param;
    }

    @Override
    public String toString() {
        return param;
    }
}
Run Code Online (Sandbox Code Playgroud)

假设我有一个带字段的 DTO:

private String frequency;
Run Code Online (Sandbox Code Playgroud)

假设我有一个JSON

{"500" : "100Hz"}
Run Code Online (Sandbox Code Playgroud)

我想将其映射json到我的dto,因此DTO.frequency将具有 json"500"字段的值(将是"100Hz")。

我知道只有常量必须用作属性值,但是否有一些解决方法可以使以下工作?

@JsonProperty(ParameterList.FREQUENCY_ID)
private String frequency;
Run Code Online (Sandbox Code Playgroud)

@JsonPropertycom.fasterxml.jackson.annotation.JsonProperty,版本 2.8.0)

这个想法是在枚举ParameterList.FREQUENCY_ID将从 , 更改"500"为其他值时最小化代码编辑。

cas*_*lin 5

您可以尝试以下操作:

public enum ParameterList {

    FREQUENCY_ID(Constants.FREQUENCY_ID_VALUE);

    private final String value;

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

    @Override
    public String toString() {
        return value;
    }

    public static class Constants {
        public static final String FREQUENCY_ID_VALUE = "500";
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用:

@JsonProperty(ParameterList.Constants.FREQUENCY_ID_VALUE)
private String frequency;
Run Code Online (Sandbox Code Playgroud)