gpt4 book ai didi

java - Jackson:枚举实例方法以字符串形式返回值

转载 作者:行者123 更新时间:2023-12-01 12:15:24 26 4
gpt4 key购买 nike

请注意:虽然这个问题似乎this one 相似我问的问题略有不同。

我正在通过 Jackson 将 POJO 序列化/反序列化为 JSON .

我正在尝试让我的 UserStatus 枚举的实例很好地(反)序列化,并尝试通过:

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
enum UserStatus {
Unregistered,
Activated,
Deactivated,
Locked

@JsonValue
String toValue() {
// TODO: ???
}
}

如果我对 Jackson 的理解是正确的,那么我的 toValue() 方法只需要弄清楚当前的 UserStatus 实例是什么值,并将其转换为字符串。因此,UserStatus.Activated.toValue() 应该为我们提供一个值为 "Activated" 的字符串。

主要问题:我如何实现这一目标?

辅助问题:这是在 Jackson-land 中序列化/反序列化枚举的正确方法吗?

最佳答案

只需调用 name() 方法即可。请参阅下面的示例:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonValue;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

;

public class JacksonTest {

public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
mapper.configure(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS, true);

Pojo pojo = new Pojo();
pojo.userStatus = UserStatus.Activated;
String json = mapper.writeValueAsString(pojo);
System.out.println(json);
Pojo deserializedPojo = mapper.readValue(json, Pojo.class);
System.out.println("--");
System.out.println(deserializedPojo);
}

public static class Pojo {
public UserStatus userStatus;

@Override
public String toString() {
return userStatus.name();
}
}

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public enum UserStatus {
Unregistered, Activated, Deactivated, Locked;

@JsonValue
public String toValue() {
return name();
}
}
}

以上程序打印:

{
"userStatus" : "Activated"
}
--
Activated

关于java - Jackson:枚举实例方法以字符串形式返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27049465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com