我需要向REST服务发送一个JSON主体。不幸的是,服务很老,我需要发送一个包含JSON字符串字段的POJO。所以它看起来像这样:
class SomeData {
int id;
SomePojo jsonField;
...
}
所以应该像这样发送SomeData:
{'id': 1, 'jsonField': some_json_string}
我还没有发现任何杰克逊魔法注释使其有效,我怀疑它可以以某种方式制作,因为Java中的类型擦除并且可能无法为此编写自定义序列化器目的,但我不确定。
您能否建议我如何使其发挥作用或解决问题?非常感谢你提前!
答案 0 :(得分:2)
您需要实现自己的序列化程序,然后可以在ObjectMapper
级别配置它,例如:
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(SomeData.class, new SomeDataSerialiser());
mapper.registerModule(module);
您可以找到完整的示例here。
答案 1 :(得分:1)
当您在Spring上下文中使用Jackson时,您可以使用@JsonSerialize
- Annotation
假设您有问题中的类,那么您可以在吸气剂上放置上述注释:
public class SomeData {
int id;
SomePojo jsonField;
@JsonSerialize(using = PojoSerializer.class)
public SomePojo getJsonField(){
return jsonField;
}
}
然后创建PojoSerializer
:
public class PojoSerializer extends JsonSerializer<SomePojo>{
@Override
public void serialize( SomePojo pojo, JsonGenerator jsonGenerator, SerializerProvider serializerProvider ) throws IOException{
jsonGenerator.writeString(pojo.getSomeString());
}
}
其余的确适合你
答案 2 :(得分:1)
如我所知,我将发布org.json
的简单示例。
班级样本:
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 here。
您可以找到完整的文档here。
此link还有更多用法示例。