如何在 Spring Boot 1.4 中自定义 Jackson

2024-06-03

我一直无法找到如何使用的示例Jackson2ObjectMapperBuilderCustomizer.java在spring boot 1.4中自定义Jackson的功能。

boot 1.4 中自定义 Jackson 的 doco -https://docs.spring.io/spring-boot/docs/1.4.x/reference/htmlsingle/#howto-customize-the-jackson-objectmapper https://docs.spring.io/spring-boot/docs/1.4.x/reference/htmlsingle/#howto-customize-the-jackson-objectmapper

我的配置有效,尽管我不确定这是否是使用自定义对象映射器的正确方法Jackson2ObjectMapperBuilderCustomizer.java

@Configuration
public class JacksonAutoConfiguration {

    @Autowired
    private Environment env;

    @Bean
    public Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder(
        List<Jackson2ObjectMapperBuilderCustomizer> customizers) {
        Jackson2ObjectMapperBuilder builder = configureObjectMapper();
        customize(builder, customizers);
        return builder;
    }

    private void customize(Jackson2ObjectMapperBuilder builder,
                           List<Jackson2ObjectMapperBuilderCustomizer> customizers) {
        for (Jackson2ObjectMapperBuilderCustomizer customizer : customizers) {
            customizer.customize(builder);
        }
    }

    private Jackson2ObjectMapperBuilder configureObjectMapper() {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        List<String> activeProfiles = asList(env.getActiveProfiles());
        if (activeProfiles.contains(SPRING_PROFILE_DEVELOPMENT)) {
            builder.featuresToEnable(SerializationFeature.INDENT_OUTPUT);
        }
        return builder;
    }
}

为了提供一些上下文,此类位于我自己的 REST 服务 Spring 启动项目中,该项目仅自动配置许多内容,例如 ControllerAdvice 和上面的一些琐碎功能。

所以我的目标是扩展 Jackson 配置,而不是覆盖 boot 或其他包提供的任何配置。


定制杰克逊ObjectMapperSpring Boot 已经预先配置好了,我能够做到这一点(这里的示例是添加自定义反序列化器)。

配置类:

@SpringBootConfiguration
public class Application {

    @Autowired
    private BigDecimalDeserializer bigDecimalDeserializer;

    ...

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer addCustomBigDecimalDeserialization() {
        return new Jackson2ObjectMapperBuilderCustomizer() {

            @Override
            public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
                jacksonObjectMapperBuilder.deserializerByType(BigDecimal.class, bigDecimalDeserializer);
            }

        };
    }

    ...

}

还有我的自定义反序列化器,以展示 Spring 如何拾取它:

@Component
public class BigDecimalDeserializer extends StdDeserializer<BigDecimal> {

    public BigDecimalDeserializer() {
        super(BigDecimal.class);
    }

    @Override
    public BigDecimal deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        ...
    }

    ...

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Spring Boot 1.4 中自定义 Jackson 的相关文章

随机推荐

  • 注入需要构造函数参数的服务

    我有一项服务需要启动一些值 Injectable export class MyService private myVals any constructor init any this myVals init 而消费者 Component
  • 使用混淆的 Proto-buf 序列化

    我正在寻找一些有关使用带有混淆功能的 proto buf 网络 Dotfuscator 时发生的情况的指导 该项目的一半是 DLL 另一半是其他地方的 EXE 它们使用 proto buf NET 完美地交换数据 直到我混淆了 DLL 此时
  • Angular 5 组件不属于任何 NgModule

    我创建了一个名为 player create 的新组件 并将其添加到 app module 中的声明中 但是 当我尝试加载页面时 出现以下错误 组件 PlayerCreateComponent 不是任何 NgModule 的一部分 或者该模
  • 如何使用 str.replace 一次替换多个对? [复制]

    这个问题在这里已经有答案了 目前我使用以下代码进行替换 有点麻烦 df1 CompanyA df1 CompanyA str replace df1 CompanyA df1 CompanyA str replace df1 Company
  • 搜索栏与节标题视图重叠

    我将搜索栏放在 tableHeaderView 内 在 iphone 6 上一切正常 但在 iphone 5s 上我得到这个奇怪的结果 override func viewDidLoad super viewDidLoad tableVie
  • Robolectric 3.0 不适用于 AppCompat 21+

    升级到 AppCompat 21 后 我们的许多 Robolectric 测试都失败了 Toolbar 和 AppCompatDelegate 似乎存在问题 我尝试了 support v4 appcompat 22 2 1 和 appcom
  • javascript函数知道它的名字吗

    我有一个名为 getItem 的函数 我想使用其中的代码读取该函数的名称 这可能吗 function getItem var functionName how do I read the function name alert functi
  • SqlAlchemy:查询具有数组的长度json字段

    我有一个包含 JSON 类型字段的表 JSON 字段包含一个带有数组的 JSON 对象 如何查询该数组每一行的长度 class Post Base tablename posts id Column Integer primary key
  • spring boot框架下如何过滤tomcat产生的访问日志

    我们使用spring boot框架 通过嵌入式tomcat生成访问日志 访问日志的格式如下 server tomcat access log enabled true server tomcat access log pattern h l
  • 如何解析比 Java 中 NumberFormat 更严格的数字?

    我正在验证表单中的用户输入 我解析输入NumberFormat http docs oracle com javase 7 docs api java text NumberFormat html 但它是邪恶的 几乎允许任何事情 有没有办法
  • PHP json_encode 反斜杠和数组名称的问题

    我正在将一些 postgresql 数据转换为 PHP json encode 但我遇到了一些问题 json encode 将 BackSlash 添加到我的数据中的所有斜杠中 在描述中出现段落标记的结束 我认为是因为反斜杠问题 我不希望我
  • 没有看到非计数 Y 轴聚合的任何字段

    我正在尝试从 http 日志中绘制出平均响应时间 当我转到可视化并尝试条形图或折线图时 只要选择除计数之外的不同聚合类型 即平均值 总和 最大值等 我就永远不会在字段下拉列表中获得任何值 我相信 X 轴应该 可以只是日期直方图 我的查询如下
  • Android 拒绝来电

    我想拒绝android中的传入 我从这些链接中看到了很多代码 Android 完全控制手机 信息亭模式 可能吗 如何 https stackoverflow com questions 7121508 android taking comp
  • 为什么向前移动指针不会影响外部函数?

    我有以下函数用于计算字符串中的空格 int countSpace char str int nSpaces 0 while str 0 if str nSpaces str return nSpaces 我这样使用这个函数 char a H
  • 将json URL导入到java并使用jackson库解析它

    我正在尝试读取 java 中的 json 链接并解析它 以便我可以将它用于其他事务 但问题是我收到错误 我真的不知道该如何处理它们 这是代码 package weather data import weather data import c
  • getActiveRange 不返回当前选择

    这应该是一个简单的问题 但我自己无法破解 我想将活动工作表中当前选定的单元格复制到名为 data 的数组中 var sheet SpreadsheetApp getActive getActiveSheet var selection sh
  • 允许在cql中进行过滤、数据建模

    我目前正在使用和研究 cassandra 中的数据建模实践 到目前为止 我知道您需要基于执行的查询进行数据建模 然而 多个select需求使得数据建模变得更加困难或不可能在一张表上处理它 所以 当你无法在1个表上处理这些要求时 你需要插入2
  • 以编程方式设置 aspnet:MaxHttpCollectionKeys

    在特定网站的一些管理功能中 我正在做一篇特别可怕的帖子 需要一个large要发布的数据量 为了实现这一点 我必须添加 Web config appSetting https stackoverflow com questions 88324
  • 在 Android 应用程序中集成 Facebook 和 LinkedIn

    我有一个集成了 Facebook 和 LinkedIn 网络的应用程序 根据说明 为了集成 LinkedIn 我需要在我的活动中的清单中添加以下代码
  • 如何在 Spring Boot 1.4 中自定义 Jackson

    我一直无法找到如何使用的示例Jackson2ObjectMapperBuilderCustomizer java在spring boot 1 4中自定义Jackson的功能 boot 1 4 中自定义 Jackson 的 doco http