SpringBoot 的使用的中的一个奇怪问题 - Jackson ObjectMapper的注入冲突

在SpringBoot项目中,由于新增功能引入自定义ObjectMapper导致原有配置失效。问题源于新Mapper覆盖了默认Mapper。通过添加注解`@Secondary`使新Mapper在默认Mapper之后注册,解决冲突。但此方法会导致其他依赖默认Mapper的Bean出现循环引用。最终通过调整Bean初始化顺序及使用泛型避免循环依赖,并使用@Resource注解进行注入。
摘要由CSDN通过智能技术生成

SpringBoot 的使用的中的一个奇怪问题:

Jackson中Mapper的注入冲突

0x1 问题

在工作中,使用的框架是SpringBoot,为了把一些对象转换为web使用的json格式的数据,就常常需要一些框架来完成,关于Object转换Json,常用的框架并不多,主要是这几个:

  • Jackson: 这个框架基本成为了Spring的标配。
  • FastJson : 这个是国内的一个框架,出自阿里,在某些时候据说效率会比较高。
  • Gson : 没怎么用过。

我现在使用的框架就是Jackson。

SpringBoot开发的系统,有一个application.properties文件,他可以配置很多关于Spring方方面面的基础设置,其中就有这Jackson。由于某种特定的需求,我需要在原有的系统中添加一个新的功能,而这个功能的实现,需要一个自己的ObjectMapper – 哦,这个就是Jackson转换ObjectJson数据的东西。

但是,一个奇怪的问题就出现了,当这个新的ObjectMapper作为Bean出现之后,原本SpingBoot中对于ObjectMapper的配置全都失去了效果,后来向前辈请教,得知应该是新的Mapper覆盖了原有的Mapper。

项目有一个WebConfig类,其中一个方法是这样的:

    @Bean
    public JsonHandler jsonHandler(ObjectMapper objectMapper) {
   
        JsonHandler jh = new JsonHandler
Spring Boot,你可以直接在Controller使用Spring默认的ObjectMapper进行注入。有两种方式可以实现这个目的。 第一种方式是通过构造函数注入。你可以在Controller类定义一个私有的ObjectMapper字段,并在构造函数使用@Autowired注解将ObjectMapper对象注入进来。下面是一个示例代码: ```java @RestController public class MyController { private final ObjectMapper objectMapper; @Autowired public MyController(ObjectMapper objectMapper) { this.objectMapper = objectMapper; } // 在这里可以使用objectMapper对象进行操作 } ``` 第二种方式是使用@Resource注解。你可以在Controller类使用@Resource注解将ObjectMapper对象注入进来。下面是一个示例代码: ```java @RestController public class MyController { @Resource private ObjectMapper objectMapper; // 在这里可以使用objectMapper对象进行操作 } ``` 这两种方式都可以让你在Controller使用Spring默认的ObjectMapper对象进行操作。你可以根据自己的喜好选择其一种方式来注入ObjectMapper对象。参考\[1\]\[2\]。 #### 引用[.reference_title] - *1* *2* [Spring boot使用Jackson ObjectMapper注入](https://blog.csdn.net/fxtxz2/article/details/107361497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值