Jackson:枚举实例方法以字符串形式返回值 [英] Jackson: enum instance methods to return values as strings

查看:149
本文介绍了Jackson:枚举实例方法以字符串形式返回值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请注意:尽管这个问题似乎类似于这一个问题我在问一个稍有不同的问题.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆