java - 使用 com.fasterxml.jackson.databind.ObjectMapper 序列化接口(interface)字段

标签 java json serialization jackson

在 json 结果中序列化? 如何在 json 结果中序列化或字段化接口(interface)。我使用 com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(obj)。

接口(interface)字段没有显示在json结果中



    @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
    @JsonSubTypes({ 
        @Type(value = TranslateEN.class, name = "en"),
        @Type(value = TranslatePT.class, name = "pt")
    })
    public interface ITranslate extends Serializable {

        String app = "Anota Ai";

    }

    @XmlRootElement
    public final class TranslatePT implements ITranslate {

        private static final long serialVersionUID = 1L;

        private static TranslatePT instance;

        private TranslatePT() {
            super();
        }

        static {
            instance = new TranslatePT();
        }

        public static TranslatePT getInstance() {
            return instance;
        }

        public final Message message = new Message();
        public final Entidade entidade = new Entidade();

        final static class Message {
            public final String defultError = "Erro inesperado";
        }

        final static class Login {
            public final String forbidden = "Sessão expirada, favor efetuar o login novamente.";
            public final String confirmacaoSenha = "A senha não confere com a confirmação de senha. Informe novamente.";
        }

        final static class Entidade {
            public final EntidadeDeletada editada = new EntidadeDeletada();
        }

        final static class EntidadeDeletada {
            public final String sucesso = "{0} editada com sucesso.";
        }

    }


    public class MessageSerialize {

        @Test
        public void loadHtmlFileTest() throws IOException {
            ObjectMapper objectMapper = new ObjectMapper();
            TranslatePT instanceTranslate = TranslatePT.getInstance();
            String dtoAsString = objectMapper.writeValueAsString(instanceTranslate);
            Assert.assertNotNull(dtoAsString);
        }

    }
    //result of serialization
    {"type":"pt","message":{"defultError":"Erro inesperado"},"entidade":{"editada":{"sucesso":"{0} editada com sucesso."}}}

最佳答案

接口(interface)中的app变量不是实例字段,而是常量。接口(interface)中的字段隐式为 public static final

常量与类相关联,它们不是实例的一部分。 Jackson 只将对象实例序列化为 JSON,因此不会序列化静态。

关于java - 使用 com.fasterxml.jackson.databind.ObjectMapper 序列化接口(interface)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44569548/

相关文章:

java - 在应用程序中存储读/写txt文件?

json - 尝试循环散列内的数组时未收到 HASH 引用错误

android - GitHub API : finding number of stars, 提交和发布

java - 在java中读取对象错误java.io.StreamCorruptedException : invalid type code: AC

java - JSON解析异常 : Expected BEGIN_ARRAY but was BEGIN_OBJECT?

java - 机器人类右键单击然后左键单击问题

java - 在 Android 设备中使用 MonkeyRunner 在屏幕上从右向左滑动

php - 一个对象json中的三个查询mysql

c# - Protobuf-net序列化/反序列化

c++ - 使用 boost 序列化为二进制存档。输入流错误