首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring中建立自定义HandlerExceptionResolver

在Spring中建立自定义HandlerExceptionResolver
EN

Stack Overflow用户
提问于 2015-12-03 22:56:20
回答 2查看 2.9K关注 0票数 0

我试图覆盖WebMvcConfigurerAdapter.configureHandlerExceptionResolvers(),并向Spring提供自己的ExceptionHandlerExceptionResolver。这样做的动机是提供自定义内容协商,如果用户请求“接受”标题中的任何垃圾,我可以用“媒体不支持的异常”返回JSON响应。我部分地能够使用下面的设置来完成配置。

代码语言:javascript
复制
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
    ContentNegotiationManager contentNegotiationManager = new ContentNegotiationManager(new ErrorContentNegotiation());
    ExceptionHandlerExceptionResolver exceptionHandlerExceptionResolver = exceptionHandlerExceptionResolver();
    exceptionHandlerExceptionResolver.setContentNegotiationManager(contentNegotiationManager);
    exceptionHandlerExceptionResolver.afterPropertiesSet();
    exceptionResolvers.add(exceptionHandlerExceptionResolver);
}

@Bean
public ExceptionHandlerExceptionResolver exceptionHandlerExceptionResolver() {
    List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
    messageConverters.add(getHttpMessageConverter());
    ExceptionHandlerExceptionResolver exceptionHandlerExceptionResolver = new ExceptionHandlerExceptionResolver();
    exceptionHandlerExceptionResolver.setMessageConverters(messageConverters);
    return exceptionHandlerExceptionResolver;
}
代码语言:javascript
复制
public class ErrorContentNegotiationStrategy implements ContentNegotiationStrategy {

@Override
public List<MediaType> resolveMediaTypes(final NativeWebRequest webRequest) {
    return Lists.newArrayList(Globals.JSON);
    }
}

春天开始的时候,我会得到这个例外。

代码语言:javascript
复制
No qualifying bean of type      [org.springframework.web.accept.ContentNegotiationStrategy] is defined: expected single matching bean but found 2: errorContentNegotiationStrategy,mvcContentNegotiationManager

当我向我的ErrorContentNegotiationStrategy类添加一个@限定符注释并给它一个唯一的名称时,它就不能工作了。抛出同样的异常。

如果删除@Compoenent注释并保留代码原样,则不会调用ErrorContentNegotiaionStrategy中的ErrorContentNegotiaionStrategy()方法。

有人面对过这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2015-12-04 00:22:53

@Primary注释添加到ErrorContentNegotiationStrategy类中:

指示当多个候选人有资格自动创建单个值依赖时,应优先考虑bean。如果候选人中确实存在一个“主”bean,那么它就是自动设置的值。

这至少应该解决启动期间的异常。

票数 0
EN

Stack Overflow用户

发布于 2015-12-17 04:26:26

调试该问题后,我发现我试图加载2个相同类型的bean(错误消息就是这么说的)。其中一个bean是实际实现,另一个是测试用例模拟。因为这两个包都位于同一个包中,@组件扫描了基本包,无法决定加载哪个包。我通过使用@profile解决了这个问题,这有助于根据您加载的概要文件加载bean。我使用了两个概要文件,一个用于测试,一个用于开发。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34077828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档