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 如果我不能用注释JsonTypeInfo标记该类,如何为该类定制json包装键?_Java_Json_Jackson_Wrapper - Fatal编程技术网

Java 如果我不能用注释JsonTypeInfo标记该类,如何为该类定制json包装键?

Java 如果我不能用注释JsonTypeInfo标记该类,如何为该类定制json包装键?,java,json,jackson,wrapper,Java,Json,Jackson,Wrapper,我有这样的代码: import org.codehaus.jackson.map.*; public class MyPojo { int id; public int getId() { return this.id; } public void setId(int id) { this.id = id; } public static void main(String[] args) throws Exception {

我有这样的代码:

import org.codehaus.jackson.map.*;

public class MyPojo {
    int id;
    public int getId()
    { return this.id; }

    public void setId(int id)
    { this.id = id; }

    public static void main(String[] args) throws Exception {
        MyPojo mp = new MyPojo();
        mp.setId(4);
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true);        
        System.out.println(mapper.writeValueAsString(mp));
    }
}
public class MyWrapper {

    private MyPojo myName = new MyPojo();

    public void setId(int id) { myName.setId(id); }
}
它的工作预期是:

{"MyPojo":{"id":4}}
但是我想定制这个名字。我不能用
@JsonTypeInfo
标记
MyPojo
,因为我从库中获取了这个类


在jackson中有没有办法做到这一点?

不使用
SerializationConfig.Feature.WRAP\u ROOT\u VALUE
您可以创建如下新类:

import org.codehaus.jackson.map.*;

public class MyPojo {
    int id;
    public int getId()
    { return this.id; }

    public void setId(int id)
    { this.id = id; }

    public static void main(String[] args) throws Exception {
        MyPojo mp = new MyPojo();
        mp.setId(4);
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true);        
        System.out.println(mapper.writeValueAsString(mp));
    }
}
public class MyWrapper {

    private MyPojo myName = new MyPojo();

    public void setId(int id) { myName.setId(id); }
}

如果您使用此类型的对象创建JSON,则该属性的名称将为myName,例如:
{“myName”:{“id”:4}

您也可以专门针对此类使用
ObjectWriter

MyPojo mp = new MyPojo();
mp.setId(4);
ObjectMapper mapper = new ObjectMapper();
ObjectWriter writer = mapper.writer().withRootName("TestPojo");
System.out.println(writer.writeValueAsString(mp));

试图对您的
MyPojo
进行子类化,并将注释添加到子类中?@Usagi Miyamoto,这是一个好主意,但我不确定我们是否可以这样做,因为我们的类是通过thriftGood idea生成的,我们无法更改签名。我无法这样做我的类是由thriftGood idea生成的。关于反序列化,您有这样的SMT吗?您可以使用
mapper.reader().withRootName(“TestPojo”).forType(MyPojo.class)
如果根名称总是相同的,那么是的。Rest取决于用例。我需要一个解决方案,在下一次调用mapper.reader()之后,该解决方案也会起同样的作用