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 Jackson的枚举';s@JsonProperty_Java_Json_Enums_Jackson - Fatal编程技术网

Java Jackson的枚举';s@JsonProperty

Java Jackson的枚举';s@JsonProperty,java,json,enums,jackson,Java,Json,Enums,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 Strin

假设我有一个枚举:

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;
    }
}
假设我有一个带有字段的DTO:

private String frequency;
假设我有一个
JSON

{"500" : "100Hz"}
我想将这个
json
映射到我的
dto
,因此
dto.frequency
将有一个json的
“500”
字段的值(即
“100Hz”

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

@JsonProperty(ParameterList.FREQUENCY_ID)
private String frequency;
@JsonProperty
com.fasterxml.jackson.annotation.JsonProperty
,版本2.8.0)


我们的想法是在枚举
参数列表时最小化代码编辑。FREQUENCY_ID
将从
“500”
更改为其他值。

json在
{“admin”:“superuser”}
方面有点奇怪,如果它像
{“role”:“superuser”}
(或者是userType而不是role),它会更清晰。但是,要将一个值映射到枚举,只需在DTO中指定它。对于您的json和一个枚举,也将
超级用户
作为一个值

public enum UserType {
    ADMIN, SUPERUSER
....
}
您所要做的就是使您的数据具有枚举类型

private UserType admin; // <-- admin because that's your key's name (maybe change that)

或者类似的东西,如果您无法更改json。

您可以尝试以下方法:

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";
    }
}
然后使用:

@JsonProperty(ParameterList.Constants.FREQUENCY_ID_VALUE)
private String frequency;

您希望在
DTO.something
中存储什么值<代码>“管理员”?我已经更新了我的问题。我想存储json中“admin”字段的值,使之成为
DTO.something=“superuser”
。。。枚举在这种情况下适合什么?对不起,我误导了你。我的问题有点不同。我已经更新了这个问题,希望它更有意义now@baao不,不会的<代码>值必须是常量。对不起,我误导了您。我的问题有点不同。我已经更新了这个问题,希望它现在更有意义,因为JsonProperty需要一个编译时字符串。Java允许注释在编译时接受枚举,但前提是它们接受所需的类型。虽然它不能直接回答OP的问题,但它可能是一个解决方案。我仍然有兴趣看到一个解决方案,它可能需要一个接受正确类型枚举的自定义Jackson注释。@htshumb如果您使用的是常量,您甚至需要枚举吗?@RyanTheLeach我需要枚举,因为我在很多地方使用这个常量,而且有很多类似的常量。主要的一点是,由于新的需求,这个常数会不时地改变。我认为这个解决方案非常适合我的需要。
@JsonProperty(ParameterList.Constants.FREQUENCY_ID_VALUE)
private String frequency;