Jackson:枚举实例方法以字符串形式返回值 [英] Jackson: enum instance methods to return values as strings
问题描述
请注意:尽管这个问题似乎类似于这一个问题我在问一个稍有不同的问题.
Please note: Although this question seems similar to this one I am asking a slightly different question.
我正在通过 Jackson 将POJO序列化/反序列化为JSON.
I am serializing/deserializing POJOs into JSON via Jackson.
我正在尝试获取我的UserStatus
枚举的实例以很好地进行(反)序列化,并尝试通过以下方式进行操作:
I am trying to get instances of my UserStatus
enum to (de)serialize nicely and am attempting via:
@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"
的字符串.
If my understanding of Jackson is correct, then my toValue()
method just need to figure out what value the current UserStatus
instance is, and convert it to a String. So UserStatus.Activated.toValue()
should gives us a String with a value of "Activated"
.
主要问题:我该如何完成?
辅助问题:这是在杰克逊地区序列化/反序列化枚举的正确方法吗?
推荐答案
只需调用name()方法.参见以下示例:
Just invoke name() method. See below example:
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
这篇关于Jackson:枚举实例方法以字符串形式返回值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!