簡體   English   中英

枚舉Jackson的@JsonProperty

[英]Enums for Jackson's @JsonProperty

假設我有一個枚舉:

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;

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

這個想法是當枚舉ParameterList.FREQUENCY_ID"500"更改為其他值時,最小化代碼編輯。

您可以嘗試以下方法:

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;

對於{"admin": "superuser"}例如{"role": "superuser"} (或userType而不是role),它會更加清晰,因此json有點怪異。 但是,要將值映射到枚舉,您要做的就是在DTO中指定它。 對於您的json和一個枚舉,還包含一個superuser作為值

public enum UserType {
    ADMIN, SUPERUSER
....
}

您要做的就是使您的DTO具有枚舉類型

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

請注意,您也可以使用

@JsonProperty("admin") private UserType userType; // or whatever name you like 

或類似的內容(如果您無法更改json)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM