You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:19:52