Spring Boot测试oauth/token接口报错:无DefaultOAuth2AccessToken转换器
解决测试用例调用oauth/token返回500(No converter found for DefaultOAuth2AccessToken)的问题
我之前也碰到过一模一样的坑!CLI调用正常但测试用例报错,核心原因是测试环境的Spring上下文没有加载到处理DefaultOAuth2AccessToken的消息转换器,和实际运行时的配置出现了差异。给你几个具体的排查和解决步骤:
1. 检查测试类的上下文配置
确保你的测试类加载了完整的AuthServer和Security配置,而不是只加载了部分Bean。如果用@SpringBootTest,最好指定包含认证服务器和安全配置的类:
@SpringBootTest(classes = {AuthServerConfiguration.class, SecurityConfiguration.class}) @AutoConfigureMockMvc public class OAuthTokenEndpointTest { // 测试代码 }
如果之前用的是@ContextConfiguration手动指定配置类,一定要把OAuth2相关的配置都包含进去,不然上下文里不会自动注册对应的转换器。
2. 手动给MockMvc配置消息转换器
如果用MockMvc测试,有时候自动配置的转换器不会生效,需要手动添加Jackson转换器(这是处理OAuth2响应最常用的转换器):
@Autowired private WebApplicationContext webApplicationContext; private MockMvc mockMvc; @BeforeEach void setUp() { // 手动添加MappingJackson2HttpMessageConverter MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(); jacksonConverter.setObjectMapper(new ObjectMapper()); mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext) .setMessageConverters(jacksonConverter) .build(); }
这样MockMvc就能识别并序列化DefaultOAuth2AccessToken对象了。
3. 检查测试请求的请求头
CLI调用时通常会自动带上Accept: application/json请求头,但测试用例里如果没设置,Spring可能找不到合适的转换器来处理响应。记得在测试请求里添加这个头:
mockMvc.perform(post("/oauth/token") .param("grant_type", "password") .param("username", "test_user") .param("password", "test_pass") .header("Accept", "application/json") // 关键:指定接受JSON格式 .with(httpBasic("client_id", "client_secret"))) .andExpect(status().isOk());
4. 确认测试依赖是否完整
有时候测试环境的依赖和运行时不一致,比如缺少Spring Security OAuth2的自动配置依赖。检查你的pom.xml(或build.gradle),确保test scope里包含了必要的依赖:
<dependency> <groupId>org.springframework.security.oauth.boot</groupId> <artifactId>spring-security-oauth2-autoconfigure</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
按这几个步骤排查下来,基本就能解决转换器找不到的问题了——毕竟CLI能正常运行说明代码逻辑没问题,就是测试环境的配置没跟上。
内容的提问来源于stack exchange,提问作者shredding
相关产品推荐
相关产品推荐

