java - Jackson:仅从接口(interface)导出 setter/getter

标签 java json jackson

我应该使用 jackson 将对象的内容序列化为 json 字符串。我想使用已有的接口(interface)来过滤输出。我可以用一个例子更好地解释!

public interface BaseInterface
{
    public String getStringOne();
    public String getStringTwo();
}

public interface ExtendedInterface extends BaseInterface
{
    public String getStringThree();
    public String getStringFour();
}

public class Foo implements ExtendedInterface
{

    public String getStringOne(){return "One";}
    public String getStringTwo(){return "Two";}
    public String getStringThree(){return "Three";}
    public String getStringFour(){return "Four";}

    public static void main(String[] args)
    {
        Foo foo = new Foo();
        String outputJSON;
        Object output1, output2;

        output1 = foo;
        outputJSON = mapper.writer().withDefaultPrettyPrinter().writeValueAsString(output1);
        System.out.println(outputJSON);

        output1 = (BaseInterface) foo;
        outputJSON = mapper.writer().withDefaultPrettyPrinter().writeValueAsString(output1);
        System.out.println(outputJSON);
    }
}

我想要在第一张打印品中看到的是

{
    "stringOne": "One",
    "stringTwo": "Two",
    "stringThree": "Three",
    "stringFour": "Four",
}

根据界面,第二个只是前两个 setter/getter

{
    "stringOne": "One",
    "stringTwo": "Two"
}

问题是我得到与第一次打印相同的 json。

最佳答案

你想要做的事情是不可能用一个类来实现的。您正在尝试将同一个对象序列化为 2 种不同的 json 格式。 Jackson 使用对象的类型、类型的访问器和修改器以及它的所有注释来生成 json。由于一个类型只能有一组注释/方法,因此您只能为该类型的给定对象生成一种 json 格式。

您需要创建 2 个 DTO 类:一个实现 BaseInterface,另一个实现 ExtendedInterface。然后您可以在它们之间传输数据。

关于java - Jackson:仅从接口(interface)导出 setter/getter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20764956/

相关文章:

json - 编码到 JSON 结构扩展了另一个具有相同字段标签的结构

javascript - 如何在 ASP.NET MVC 3 的 Razor View 中编码嵌入式 javascript?

java - 包含 Map<String, Object> 字段的对象的 Jackson 默认类型

java - AssertJ:如何使 JsonNode 比较处理 IntNode 和 LongNode 相同?

java - 服务的访问控制(设计决策)

Java 8 Streams 分组收集器

c# - 如何设置 JSON 对象从结果开始?.Net MySQL JSON Restful Webservice?

java - 如何将json反序列化为多态类?

Java,HttpURLConnection 和设置内容长度

java - 在 spring xml 配置中定义 guava HashBasedTable/Table