Java Jackson:仅从接口导出getter
我应该使用jackson将对象的内容序列化为json字符串。我想使用我已有的接口过滤输出。我可以用一个例子更好地解释Java Jackson:仅从接口导出getter,java,json,jackson,Java,Json,Jackson,我应该使用jackson将对象的内容序列化为json字符串。我想使用我已有的接口过滤输出。我可以用一个例子更好地解释 public interface BaseInterface { public String getStringOne(); public String getStringTwo(); } public interface ExtendedInterface extends BaseInterface { public String getStringT
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",
}
根据接口,在第二种情况下,只有前两个getter
{
"stringOne": "One",
"stringTwo": "Two"
}
问题是我得到的json与第一次打印的相同。您试图用一个类来实现的是不可能的。您正在尝试将同一对象序列化为两种不同的json格式。Jackson使用对象的类型、类型的访问器和变异器及其所有注释来生成json。由于一个类型只能有一组注释/方法,因此只能为该类型的给定对象生成一种json格式
您需要创建两个DTO类:一个实现
BaseInterface
,另一个实现ExtendedInterface
。然后,您可以在它们之间传输数据。强制转换不会更改对象。我知道,但是如果我尝试从声明为BaseInterface obj
的对象使用getStringThree,编译器会说有错误。我想限制jackson可以使用的getter方法。这就是我想要逃避的!:(问题是我只有一个源返回包含数据的对象。然后,根据用途,我想使用一组或另一组getter(在本例中是限制集)。有办法吗?@user2714602我不记得ObjectMapper
方法,但你应该能够将你的对象转换成JsonNode
并添加/删除json字段。但这似乎并不比DTO好。好吧,也许有办法,但实现起来可能会花费太多时间。DTO类更简单,而且它们不需要我不需要那么多代码。