使用Jackson将通用POJO转换为JSON,根据通用类动态生成JSON键。

huangapple 未分类评论76阅读模式
标题翻译

Generic POJO to JSON using jackson with dynamic json key as per Generic class

问题

我有一个类似的POJO:

  1. class Wrapper<T> {
  2. private int count;
  3. private T data;
  4. // 获取器和设置器
  5. }

当使用Jackson将其转换为JSON时,JSON大致如下:

  1. {
  2. count:1,
  3. **data**:{}
  4. }

我需要根据类名T或与类名相关的其他值来更改data键,我应该如何实现这一点。请给予建议。谢谢。

英文翻译

I have a POJO like:

  1. class Wrapper,T&gt; {
  2. private int count;
  3. private T data;
  4. // getters setters
  5. }

While converting it to JSON using Jackson, json is something like:

  1. {
  2. count:1,
  3. **data**:{}
  4. }

I need the data key to be changed as per class name T or some other value related to class name, how can I achieve this. Please suggest.
Thankyou.

答案1

得分: 1

使用自定义序列化器,您可以做任何您想要的事情,因为您对序列化过程拥有完全控制权。例如,请参阅https://www.baeldung.com/jackson-custom-serialization。

您的serialize方法可能如下所示:

  1. @Override
  2. public void serialize(
  3. Wrapper<?> value, JsonGenerator jgen, SerializerProvider provider)
  4. throws IOException, JsonProcessingException {
  5. String derivedName = value.getClass().getSimpleName() + "Data"; // 仅为示例
  6. jgen.writeStartObject();
  7. jgen.writeNumberField("count", value.getCount());
  8. jgen.writeObjectField(derivedName, value.getData());
  9. jgen.writeEndObject();
  10. }
英文翻译

Using a custom serializer, you can do anything you want since you have complete control over the serialization process. See for example https://www.baeldung.com/jackson-custom-serialization.

Your serialize method would look something like this:

  1. @Override
  2. public void serialize(
  3. Wrapper&lt;?&gt; value, JsonGenerator jgen, SerializerProvider provider)
  4. throws IOException, JsonProcessingException {
  5. String derivedName = value.getClass().getSimpleName() + &quot;Data&quot;; // just an example
  6. jgen.writeStartObject();
  7. jgen.writeNumberField(&quot;count&quot;, value.getCount());
  8. jgen.writeObjectField(derivedName, value.getData());
  9. jgen.writeEndObject();
  10. }

huangapple
  • 本文由 发表于 2020年3月16日 17:23:52
  • 转载请务必保留本文链接:https://java.coder-hub.com/60703286.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定