注册OAuth2ClientJackson2Module后仍无法构造OAuth2AccessToken实例求助
解决OAuth2AccessToken反序列化失败问题
问题分析
你遇到的错误核心原因是:OAuth2AccessToken没有默认构造函数,常规Jackson反序列化逻辑无法处理;而你注册的OAuth2ClientJackson2Module仅负责OAuth2客户端相关类(如OAuth2AuthorizedClient)的序列化/反序列化,不包含核心类OAuth2AccessToken的处理逻辑,因此无法解决该类的反序列化问题。
解决方案
需要注册Spring Security OAuth2核心模块对应的Jackson扩展:OAuth2CoreJackson2Module。如果你的服务同时承担OAuth2客户端和授权服务器角色,可以同时注册核心模块与客户端模块。
修正后的配置代码
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.security.oauth2.client.jackson2.OAuth2ClientJackson2Module; import org.springframework.security.oauth2.core.jackson2.OAuth2CoreJackson2Module; @Configuration public class JacksonConfiguration { @Bean public MappingJackson2HttpMessageConverter customMappingJackson2HttpMessageConverter() { Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); // 同时注册核心模块和客户端模块 builder.modules(new OAuth2CoreJackson2Module(), new OAuth2ClientJackson2Module()); return new MappingJackson2HttpMessageConverter(builder.build()); } }
Spring Boot环境推荐配置方式
如果是Spring Boot项目,更推荐通过Jackson2ObjectMapperBuilderCustomizer添加模块,这样能更好地适配Spring自动配置体系,避免自定义MappingJackson2HttpMessageConverter可能引发的优先级问题:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.security.oauth2.client.jackson2.OAuth2ClientJackson2Module; import org.springframework.security.oauth2.core.jackson2.OAuth2CoreJackson2Module; @Configuration public class JacksonConfiguration { @Bean public Jackson2ObjectMapperBuilderCustomizer oauth2JacksonCustomizer() { return builder -> { builder.modules(new OAuth2CoreJackson2Module(), new OAuth2ClientJackson2Module()); }; } }
关键说明
OAuth2CoreJackson2Module提供了OAuth2AccessToken、OAuth2TokenType等核心OAuth2类的自定义序列化/反序列化器,专门解决这类无默认构造函数类的序列化问题。- 若仅需处理
OAuth2AccessToken,单独注册OAuth2CoreJackson2Module即可;若同时需要处理客户端相关类,再补充注册OAuth2ClientJackson2Module。
内容的提问来源于stack exchange,提问作者BigMouse
相关产品推荐
相关产品推荐

