ExceptionHandlerExceptionResolver的自定义参数解析器

时间:2013-04-09 12:01:49

标签: spring-mvc

我正在尝试在spring mvc 3.2中使用ExceptionHandler注释的方法中使用自定义参数来处理异常。 但是,执行该方法时仍然会出现此异常: java.lang.IllegalStateException:没有合适的参数解析器[1] [type = com.example.domain.CustomArgument]

Controller方法如下:

@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:annotation-driven已经分配了一个ExceptionHandlerExceptionResolver,那么我该如何将customArgumentResolver添加到其中呢。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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>