简体   繁体   English

Jackson 改变一个值的键而不使用注解

[英]Jackson change the key of a value without using annotation

I have a class A, with a property Pojo p .我有一个 class A,有一个属性Pojo p

class A {
   Pojo p;
}

I have a custom Serializer for Pojo, but I didn't find any way to change the key of Pojo, by default it's serialized as p .我有一个用于 Pojo 的自定义序列化器,但我没有找到任何方法来更改 Pojo 的密钥,默认情况下它被序列化为p

Is there any way to change the key p to something else, like有什么方法可以将密钥p更改为其他内容,例如

{
"some_other_key": {/* json for Pojo goes here*/}  
}

I can't use jackson annotations because this is a class from a lib.我不能使用 jackson 注释,因为这是来自 lib 的 class。

public class PojoSerializer extends StdSerializer<Pojo> {


  @Override
  public void serialize(Pojo pojo, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
    //how can I set the key of this Pojo?
    jsonGenerator.writeObject(pojo);
  }

}

In a nutshell, use jsonGenerator.简而言之,使用 jsonGenerator。

jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("firstField", pojo.getFirstField());
jsonGenerator.writeEndObject();

You also need a custom serializer for A itself, not just "Pojo".您还需要 A 本身的自定义序列化程序,而不仅仅是“Pojo”。

public class PojoSerializer extends StdSerializer<A> {


  public SaleBoSerializer(Class<A> t) {
    super(t);
  }

  @Override
  public void serialize(A a, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
    jsonGenerator.writeStartObject();
    jsonGenerator.writeObjectField("custom_field_name", a.pojo)
    jsonGenerator.writeEndObject();
  }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM