2017-06-15 304 views
1

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

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

回答

2

在界面的app变量不是实例字段,而是恒定的。界面中的字段隐含地为public static final

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

2

正如Luciano指出的那样(隐含地)即使您使用适当的注释,静态字段也不会被Jackson序列化。但是,Jackson将默认调用它找到的所有getter方法,并将返回值放入JSON中,并使用从getter名称派生的字段名称。所以,如果你必须序列静态字段app只是把一个名为getApp在一个类中的getter方法,在这种情况下TranslatePT

public String getApp() { 
    return app; 
} 
+0

不错的解决方法马诺斯。 –