java - 在 Jackson 构造函数中使用自定义对象

标签 java jackson

有没有办法为 Jackson 反序列化器提供一个来自“外部”(例如 DI 容器)的默认值,该值将在反序列化对象时使用,在本例中为 tagRegistry?

  @JsonCreator
  public ExtractionRule(@JsonProperty("id") String id, 
                        TagRegistry tagRegistry) {
    this.id = id;
    this.tagRegistry = tagRegistry;
  }

我找不到简单的方法来做到这一点。

最佳答案

你可以尝试@JacksonInject。将此成员添加到 ExtractionRule 类:

@JacksonInject("tagRegistry")
private TagRegistry tagRegistry;

并在反序列化之前将tagRegistry注入(inject)到ObjectMapper中:

 InjectableValues.Std injectableValues = new InjectableValues.Std();
 injectableValues.addValue("tagRegistry", tagRegistry);

 ObjectMapper objectMapper = new ObjectMapper();
 objectMapper.setInjectableValues(injectableValues);

我还没有尝试在构造函数中使用它,不确定这是否有效。 您可以在这里找到更多示例:

关于java - 在 Jackson 构造函数中使用自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58605008/

相关文章:

java - 传递数组引用时,如何更改对其他数组的引用?

java - ObjectMapper 将日期更改为字符串

java - 在 spring-boot 中将 protobuf 作为 JSON 发送

java - CDI 注入(inject)未在 Jackson 序列化程序中解决

java - 将带有参数的文件传递给 mapreduce 作业

java - 与 Integer.MAX_VALUE 比较并使用 System.out.println 时,for 循环提前终止

java - 扫描仪跳过输入,可能有空格?

java - 将错误消息从 Java 服务器代码传递到 XPage 客户端

java - 使用@JsonProperty 序列化 map

java - 如何使用 jackson (com.fasterxml.jackson) 为相同的 key 使用不一致的 json 结构?