【问题标题】:Can I customize a Jackson ObjectMapper by adding a module?我可以通过添加模块来自定义 Jackson ObjectMapper 吗?
【发布时间】:2015-01-31 19:54:49
【问题描述】:

我是using a library,它创建了一个ObjectMapper,并在这个映射器中添加了一些自己的Modules。我希望这些模块中的序列化程序能够漂亮地打印出来。但是,我只能通过builder that lets me add my own modules 来配置此映射器。我可以使用我的能力将模块添加到ObjectMapper 以将其配置为漂亮的打印吗?我没有看到 SimpleModule 的任何方法或属性表明我可以。

【问题讨论】:

    标签: java jackson tinkerpop3


    【解决方案1】:

    是的,如果您可以使用ObjectMapper 注册Module,您就可以操作映射器。覆盖Module 上的setupModule() 方法,然后在您获得的Module.SetupContext 上使用getOwner()

    GraphSONMapper mapper = GraphSONMapper.build().addCustomModule(new SimpleModule() {                                          
        public void setupModule(com.fasterxml.jackson.databind.Module.SetupContext context) {                                    
            ObjectMapper mapper = context.getOwner();                                                                            
            mapper.enable(SerializationFeature.INDENT_OUTPUT);                                                                   
        }                                                                                                                        
    }).create();                                                                                                                 
    GraphSONWriter writer = graph.io().graphSONWriter().mapper(mapper).create();
    

    getOwner() 的文档建议你不应该这样做,除非你必须这样做。

    【讨论】:

    • 值得注意的是启用SerializationFeature.INDENT_OUTPUTwill only enable use of default pretty printing,其中包括两行缩进。待定如何优雅地覆盖缩进。
    • 我认为这属于getOwner() 中文档的“或存在疏忽”部分。 GraphSONMapperObjectMapper 的实例化,在内部硬编码而不是以某种方式抽象,这使得直接配置映射器看似不可能,但必须有办法。
    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 2014-05-24
    • 2014-02-23
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多