首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring @ExceptionHandler不工作

Spring @ExceptionHandler不工作
EN

Stack Overflow用户
提问于 2015-11-11 23:34:03
回答 1查看 787关注 0票数 0

我正在尝试使用@ExceptionHandler处理异常,但它不起作用,我不知道为什么。问题是,现在我从我的web服务中得到了这样的响应:{“message”:“提供的日期2013-02-30无效”,"code":500,"ids":null}。我希望这是一个400的例外,而不是500。下面是我的代码:

代码语言:javascript
复制
@Controller
public class WsController {
    @RequestMapping(value={"/getDeletedUsers"}, method=RequestMethod.GET)
    public List<Integer> getDeletedUsers(@RequestParam(value = "date", required = true) String dateStr) throws WebServiceException {
        if (dateStr == null) {
            throw new WebServiceException("The date provided is null");
        } else if (StringUtils.isEmpty(dateStr)) {
            throw new WebServiceException("The date provided is empty");
        } else {
            SimpleDateFormat sdf = new SimpleDateFormat();
            sdf.applyPattern("yyyy-MM-dd");
            sdf.setLenient(false);
            try {
                sdf.parse(dateStr);
            } catch (ParseException e) {
                throw new WebServiceException("The date provided " + dateStr + " is invalid");
            }
            return service.getDeletedUsers(dateStr);
        }
    }

    @ExceptionHandler(WebServiceException.class)
    public void handleWebServiceException() {
        System.out.println("PLEASE DO SOMETHING!");
    }
}

public class WebServiceException extends Exception {
    //Constructors and serialVersionUID
}

disparcher-servlet.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:util="http://www.springframework.org/schema/util"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="searchContextAttributes" value="true"/>
    <property name="contextOverride" value="true"/>
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="locations">
        <list>
            <value>classpath:application.properties</value>
            <value>file:c://rt//properties//webservices-application.properties</value>
        </list>
    </property>
</bean>

<import resource="classpath:keepalive.xml" />
<import resource="classpath:controller.xml" />

<bean id="exceptionResolver" class="com.company.project.webservices.spring.ExceptionResolver"/>

<bean id="error" class="com.company.project.webservices.spring.ErrorView"/>
<bean id="readOnlyModeError" class="com.company.project.webservices.spring.ReadOnlyModeErrorView"/>
<bean id="methodUnavailableError" class="com.company.project.webservices.spring.MethodUnavailableErrorView"/>
<bean id="badRequestError" class="com.company.project.webservices.spring.BadRequestErrorView"/>

<!-- View Resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  <property name="order" value="1" />
  <property name="mediaTypes">
    <map>
        <entry key="json" value="application/json"/>
    </map>
  </property>
      <!-- Ticket-3245 Spring 60 -->
      <property name="defaultContentType" value="application/json" />
      <property name="useNotAcceptableStatusCode" value="true"/>
  <property name="viewResolvers">
    <list>
      <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="2" />
      </bean>
    </list>
  </property>
  <property name="defaultViews">
    <list>        
      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
    </list>
  </property>
</bean>

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="messages"/>
</bean>

<!-- Dispatches requests mapped to POJO @Controllers implementations -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <util:list id="beanList">
            <ref bean="jsonHttpMessageConverter"/>
        </util:list>
    </property>
</bean>

<bean id="jsonHttpMessageConverter" 
   class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
</bean>


<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="useDefaultSuffixPattern" value="false"/>
</bean>

<!-- Dispatches requests mapped to non-annotated controllers -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

<context:annotation-config/>    
<context:component-scan base-package="com.company.project" />

当我尝试调试handleWebServiceException方法时,它甚至没有停止。任何建议都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2015-11-12 17:25:53

正如jny建议的那样,我查看了dispatcher-servlet.xml,并意识到有一个我还没有见过的exceptionResolver bean是这样的:

代码语言:javascript
复制
public class ExceptionResolver extends AbstractHandlerExceptionResolver {

private static Log logger = LogFactory.getLog(ExceptionResolver.class);

@Override
protected ModelAndView doResolveException(HttpServletRequest request,
        HttpServletResponse response, Object handler, Exception ex) {
    ModelAndView mv = null;
    if (ex instanceof ReadOnlyModeException) {
        mv = new ModelAndView("readOnlyModeError");
    } else if (ex instanceof MethodUnavailableException) {
        mv = new ModelAndView("methodUnavailableError");
    } else if (ex instanceof BadRequestException) {
        mv = new ModelAndView("badRequestError");
    } else {
        logger.error("caught an exception: ", ex);
        mv = new ModelAndView("error");
    }
    ResultBean resultBean = new ResultBean();
    resultBean.setCode(500);
    resultBean.setMessage(ex.getMessage());
    mv.addObject("result", resultBean);
    return mv;
}

}

在那里,我能够做出适当的改变。再次感谢jny的提示。

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

https://stackoverflow.com/questions/33654035

复制
相关文章

相似问题

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