2017-06-15 303 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

不錯的解決方法馬諾斯。 –