ExceptionHandlerExceptionResolver的自定义参数解析器

问题描述:

我想在spring mvc 3.2中用ExceptionHandler注解的方法中使用自定义参数来处理异常。 但是我仍然获得时执行该方法此异常: java.lang.IllegalStateException:没有合适的解析程序参数[1] [式= com.example.domain.CustomArgument]ExceptionHandlerExceptionResolver的自定义参数解析器

在控制器方法是这样的:

@ExceptionHandler(IOException.class) 
@ResponseBody 
public Error handleIOException(IOException ex, CustomArgument customArgument) { 
    return new Error(customArgument.getMessage()); 
} 

而且我使用下面的XML配置:

<mvc:annotation-driven> 
    <mvc:argument-resolvers> 
     <bean class="com.example.spring.CustomArgumentWebArgumentResolver" scope="singleton"> 
      <constructor-arg ref="customArgumentService" /> 
     </bean> 
    </mvc:argument-resolvers> 
</mvc:annotation-driven> 

<bean id="customArgumentService" class="com.example.service.CustomArgumentService" scope="singleton" /> 

<bean class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver" scope="singleton"> 
    <property name="customArgumentResolvers"> 
     <list> 
      <bean class="com.example.service.CustomArgumentService" scope="singleton"> 
       <constructor-arg ref="customArgumentService" /> 
      </bean> 
     </list> 
    </property> 
</bean> 

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" scope="singleton"> 
    <property name="defaultErrorView" value="forward:/error" /> 
</bean> 

而且我相信MVC:注解驱动已经分配ExceptionHandlerExceptionResolver,所以我怎么能在customArgumentResolver添加到这一点。 任何帮助将不胜感激。

对于几个ExceptionResolvers,请尝试使用HandlerExceptionResolverComposite。类似这样的:

<bean class="org.springframework.web.servlet.handler.HandlerExceptionResolverComposite"> 
    <property name="exceptionResolvers"> 
     <list> 
      <bean class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver"> 
       <constructor-arg ref="exceptionHandlerExceptionResolver" /> 
      </bean> 
      <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
       <constructor-arg ref="simpleMappingExceptionResolver" /> 
      </bean> 
     </list> 
    </property> 
    <property name="order" value="0"/> 
</bean>