源码之家

  • 首页
  • 文章
  • 问答
  • 下载
您的位置: 首页  >  技术问答  >  杰克逊收集为了属性顶层JSON输出字符串

杰克逊收集为了属性顶层JSON输出字符串
分类: 技术问答 • 2022-03-19 21:55:22

杰克逊收集为了<Object>属性顶层JSON输出字符串

问题描述:

我使用杰克逊有日志输出为JSON。
的事情之一是,我们允许使用以下语法登录:杰克逊收集为了<Object>属性顶层JSON输出字符串

log.info("yourMessage {}", innerMessageObject, Meta.of("key", ObjectValue)) 

输出I HAVE

{ 
    "level": INFO, 
    ... classic logging attributes 
    "metadata": { 
    "object1": "value 1", 
    "object2": { ... } 
    ... 
    } 
} 

输出I WANT

{ 
    "level": INFO, 
    ... classic logging attributes 
    "object1": "value 1", 
    "object2": { ... } 
    ... 
} 

我的日志POJO

@Data 
class JsonLog { 
    @JsonIgnore 
    private static final ObjectMapper mapper = JsonLog.initMapper(); 

    private final String message; 
    private final String class_name; 
    private final Collection<Object> metadata; 
    private final Marker marker; 
    private final String level; 
    private final Long timestamp; 
    private final String thread; 
    private final String logger; 
    private final LoggerContextVO logger_context; 
    private final Map<String, String> environment_vars; 
} 

我没有成功,只具有metadata属性序列化为顶级属性。

看来我不能用@JsonUnwrapped因为this issue,我也试过this solution但不能看到如何实现它。

你有什么想法?

谢谢:)

答

难道是OK转换metadata是Map<String, Object>?这似乎是你的例子JSON,这实际上是Java中JSON的自然泛型表示。在这种情况下:

private final Map<String, Object> metadata; 

@JsonAnyGetter 
Map<String, Object> getMetadata() { 
    return metadata; 
} 

按照docs,这个注释标记getter方法:

被序列化为含有POJO(类似于解缠)

并能的一部分只能用于返回Map的方法。我不知道的解决方案Collection

+0

感谢您的回答,它需要一些修改,但我会试一试! – ogdabou

+0

谢谢你的作品:) – ogdabou

相关推荐

  • 杰克逊收集为了属性顶层JSON输出字符串
  • 杰克逊反序列化列表
  • Rails ActiveAdmin注册,包装另一个资源
    • 网站免责声明 网站地图 最新文章 用户隐私 版权申明
    本站所有数据收集于网络,如果侵犯到您的权益,请联系网站进行下架处理。   

    Copyright © 2018-2021   Powered By 源码之家    备案号:   粤ICP备20058927号