0

Javadoc によると、 DispatcherServlet ではAnnotationMethodHandlerExceptionResolverResponseStatusExceptionResolver、およびDefaultHandlerExceptionResolverがデフォルトで有効になっています。

を作成しようとしていますが、デフォルトで有効になっているインスタンスHandlerExceptionResolverCompositeを取得したいと考えています。HandlerExceptionResolverを試み@Autowiredましたが、うまくいきませんでした。

私の現在の解決策は次のとおりです。

@Configuration
public class ErrorHandling {

//  @Autowired
//  AnnotationMethodHandlerExceptionResolver amher;
//  
//  @Autowired
//  ResponseStatusExceptionResolver rser;
//  
//  @Autowired
//  DefaultHandlerExceptionResolver dher;

    @Bean
    HandlerExceptionResolverComposite getHandlerExceptionResolverComposite() {

        HandlerExceptionResolverComposite result
            = new HandlerExceptionResolverComposite();

        List<HandlerExceptionResolver> l
            = new ArrayList<HandlerExceptionResolver>();

        l.add(new AnnotationMethodHandlerExceptionResolver());
        l.add(new ResponseStatusExceptionResolver());
        l.add(new DefaultHandlerExceptionResolver());

        result.setExceptionResolvers(l);

        return result;

    }

}

私の質問はHandlerExceptionResolver、デフォルトで有効になっているインスタンスを取得するにはどうすればよいですか? 独自のインスタンスを作成しても問題はありますか?

4

1 に答える 1

1

BeanFactoryUtils で何かを見つけました

Map<String, HandlerExceptionResolver> matchingBeans = BeanFactoryUtils
                    .beansOfTypeIncludingAncestors(context, HandlerExceptionResolver.class, true, false);

DispatchServlet のソースを確認し、initHandlerExceptionResolvers() メソッドに移動します。おそらく、登録されているすべての例外リゾルバーを取得する方法を見つけることができます。

ありがとう

于 2012-11-05T07:29:09.460 に答える