将字段序列化为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。
您可以在此处找到完整的文档。
此链接还有更多用法示例。