在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."}}}
答案 0 :(得分:2)
接口中的app
变量不是实例字段,而是常量。接口中的字段隐式public static final
。
常量与类关联,它们不是实例的一部分。 Jackson只将对象实例序列化为JSON,因此不会序列化静态。
答案 1 :(得分:2)
正如Luciano所指出的那样(隐含地),即使你使用适当的注释,静态字段也不会被杰克逊序列化。但是,Jackson默认会调用它找到的所有getter方法,并将返回值放在JSON中,并使用从getter名称派生的字段名称。因此,如果必须序列化静态字段app
,只需在类中放置名为getApp
的getter方法,在本例中为TranslatePT
:
public String getApp() {
return app;
}