【问题标题】:Change one field from string to json object in jackson在jackson中将一个字段从字符串更改为json对象
【发布时间】:2019-10-14 21:47:16
【问题描述】:

我有一个类,其中 employeeDetails 从数据存储中读取为 json 字符串。

public class Employee {
  private String name;

  @JsonProperty("employeeDetails")
  @JsonSerialize(???)
  private String employeeDetailsBlob;

  // getters and setters
}

现在我想在响应中将employeeDetails(动态类型)作为对象返回。我已经使用@JsonProperty 更改了名称,我所拥有的所有示例都是使用@JsonSerialize(using = Employee.class)

所以我的回复应该是这样的

{name: "foo", employeeDetails: { age: 21 }}

我得到的是

{name: "foo", employeeDetails: "{ age: 21 }"}

我可以将@JsonSerialize 添加到我的班级,但我必须自己处理所有字段并在被覆盖的方法中执行类似的操作。

jgen.writeFieldName("employeeDetails");
SerializedString serializedString = new SerializedString(empl.getEmployeeDetailsBlob());
jgen.writeRawValue(serializedString);

有没有办法我可以使用注释来做到这一点,而且也只能在我想从 json 字符串更改为 json 对象的字段上。

【问题讨论】:

  • 如果employeeDetailsBlob 是POJO,那么这将自动发生。无需指定任何内容
  • 去掉JsonSerialize注解
  • 是的,它是一个 POJO。但我得到一个字符串,我想要一个 json 对象。
  • 默认你应该得到一个 JSON 对象,而不是字符串
  • 我添加了@JsonSerializer 仅供参考,在实际代码中,它不存在,我得到一个字符串。

标签: java json jackson


【解决方案1】:

添加 @JsonRawValue 成功了。

public class Employee {
   private String name;

   @JsonProperty("employeeDetails")
   @JsonRawValue
   private String employeeDetailsBlob;

   // getters and setters
}

【讨论】:

  • 为什么将字段保留为字符串?你说它是 POJO
  • 我正在从数据存储中读取它,它以字符串形式出现,当我必须发送响应时,我需要发送一个对象。
  • 啊,所以你应该从那个字符串构建一个 POJO ......但也许那是矫枉过正
  • 是的,而且我不知道employeeDetailsBlob的类型
  • 再次感谢@DavidBrossard
猜你喜欢
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 2016-02-08
  • 1970-01-01
  • 2018-08-26
相关资源
最近更新 更多