将字段序列化为json

我需要向REST服务发送一个JSON主体。 不幸的是,服务很老,我需要发送一个包含JSON字符串字段的POJO。 所以它看起来像这样:

class SomeData { int id; SomePojo jsonField; ... } 

所以SomeData应该像这样发送:

 {'id': 1, 'jsonField': some_json_string} 

我没有找到任何jackson魔法注释使其工作,我怀疑它可以以某种方式制作,因为Java中的类型擦除,可能无法为此目的编写自定义序列化器,但我不确定。

您能否建议我如何使其工作或解决问题? 非常感谢你提前!

在Spring上下文中使用Jackson时,可以使用@JsonSerialize -Annotation

假设您有问题中的类,那么您可以将上面提到的注释放在getter上:

 public class SomeData { int id; SomePojo jsonField; @JsonSerialize(using = PojoSerializer.class) public SomePojo getJsonField(){ return jsonField; } } 

然后创建PojoSerializer

 public class PojoSerializer extends JsonSerializer{ @Override public void serialize( SomePojo pojo, JsonGenerator jsonGenerator, SerializerProvider serializerProvider ) throws IOException{ jsonGenerator.writeString(pojo.getSomeString()); } } 

其余的确适合你

您需要实现自己的序列化器,然后可以在ObjectMapper级别配置它,例如:

 ObjectMapper mapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.addSerializer(SomeData.class, new SomeDataSerialiser()); mapper.registerModule(module); 

你可以在这里找到完整的例子。

如我org.json ,我将发布一个org.json的简单示例。

class级样本:

 import org.json.*; public class MyClass { private int id; private String randomString; public MyClass(int id_, String randomString_){ this.id = id_; this.randomString = randomString_; } public int getId() { return id; } public String getRandomString() { return randomString; } //Uses the getter to generate a JSon representation of the class public JSONObject toJson(){ return new JSONObject(this); } } 

主要:

 public static void main(String[] args) { MyClass test = new MyClass(1, "Test"); System.out.println(test.toJson().toString()); } 

输出: {"id":1,"randomString":"Test"}

你可以在这里下载Jar。

您可以在此处找到完整的文档。

此链接还有更多用法示例。