我使用的是Spring OAuth 2.0.7版。从阅读源代码我认为端点/ oauth / token应该配置DefaultRequestTokenConverter,但是我得到以下异常:
org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken(java.security.Principal,java.util.Map<java.lang.String, java.lang.String>) throws org.springframework.web.HttpRequestMethodNotSupportedException]: java.lang.IllegalArgumentException: No converter found for return value of type: class org.springframework.security.oauth2.common.DefaultOAuth2AccessToken
在org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor中找不到可生成的媒体类型:
if (returnValue != null && producibleMediaTypes.isEmpty()) {
throw new IllegalArgumentException("No converter found for return value of type: " + returnValueClass);
}
在任何情况下,我也尝试为端点明确设置转换器:
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.accessTokenConverter(new DefaultAccessTokenConverter()).tokenStore(tokenStore());
}
异常仍然存在。
我也尝试在Spring MVC配置中设置消息转换器:
@Configuration
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new FormOAuth2AccessTokenMessageConverter());
converters.add(new FormOAuth2ExceptionHttpMessageConverter());
}
}
但异常仍然存在。
我很困惑在哪里设置消息转换器。
答案 0 :(得分:5)
如果有人遇到同样的问题,在项目的pom.xml中添加以下内容可以解决这个丢失的转换器错误:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.2</version>
</dependency>