我应该使用 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/