2013-04-09 159 views
0

我想在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添加到這一點。 任何幫助將不勝感激。

回答

0

對於幾個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>