Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson:仅从接口导出getter_Java_Json_Jackson - Fatal编程技术网

Java Jackson:仅从接口导出getter

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

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

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类更简单,而且它们不需要我不需要那么多代码。