繁体   English   中英

使用com.fasterxml.jackson.databind.ObjectMapper序列化接口字段

[英]serialize interface fields using com.fasterxml.jackson.databind.ObjectMapper

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

接口字段未显示在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."}}}

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

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

正如Luciano所指出的那样,即使您使用适当的注释,静态字段也不会被Jackson序列化。 但是,Jackson默认情况下将调用其找到的所有getter方法,并将返回值与从getter名称派生的字段名称一起放入JSON。 因此,如果必须序列化静态字段app只需将一个名为getApp的getter方法getApp类中,在本例中为TranslatePT

public String getApp() {
    return app;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM