• spring参数类型异常输出(二), SpringMvc参数类型转换错误输出(二)


    spring参数类型异常输出(二),

    SpringMvc参数类型转换错误输出(二)

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    蕃薯耀 2016年6月6日 17:58:30 星期一

    http://fanshuyao.iteye.com/

    一、问题描述

    一般情况下,Spring对于方法接收参数的错误是没有提示的,而是直接输入到一个错误的页面,但从错误页面是看不出到底是什么错。

    详细请看:http://fanshuyao.iteye.com/blog/2303357

    二、解决方案

    之前已经有一种注解的方法,在方法加上注解:

    @ExceptionHandler({TypeMismatchException.class })

    详情见:http://fanshuyao.iteye.com/blog/2303357

    现在介绍另外一种方法:

    1、通过继承:DefaultHandlerExceptionResolver,重写方法resolveException

    public class MyExceptionHandler extends DefaultHandlerExceptionResolver {
    
    	@Override
    	public ModelAndView resolveException(HttpServletRequest request,
    			HttpServletResponse response, Object handler, Exception ex) {
    		ModelAndView mav = new ModelAndView("errors/error");
    		mav.addObject("ex", ex);
    		ex.printStackTrace();
    		
    		if(ex instanceof TypeMismatchException){
    			mav.setViewName("errors/typeMismatch");
    			return mav;
    		}
    		if(ex instanceof Exception){
    			return mav;
    		}
    		return mav;
    	}
    
    }

    2、在springMvc文件配置MyExceptionHandler

    <bean id="exceptionHandler" class="com.chinagas.basic.exception.MyExceptionHandler" p:order="1"></bean>

    需要注意的是:一定是加上p:order="1",不然也会没有效果

    p标签需要引入命名空间:

    xmlns:p="http://www.springframework.org/schema/p"

    Eclipse添加方法:

    直接选择,然后保存就添加进去。



     

    测试:

    @RequestMapping("/test")
    	public String test(int i) throws Exception{
    		System.out.println(i);
    		int a = 2/i;
    		throw new RuntimeException("出错了!");
    	}

    请求上面的方法:http://localhost:8080/zrbboss/ex/test?i=a,这里的i的值是a,但方法接收的整型,类型转换错误。

    然后再看控制台,打印出错误信息了:

    org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: "a"
    	at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:77)
    	at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:47)
    	at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:603)
    	at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:104)
    	at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77)[16/06/06 18:09:47:206][com.chinagas.common.utils.UserAuthInterceptor-preHandle] request url is ==/zrbboss/ex/test
    
    	at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162)
    	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
    	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
    	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
    	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.NumberFormatException: For input string: "a"
    	at java.lang.NumberFormatException.forInputString(Unknown Source)
    	at java.lang.Integer.parseInt(Unknown Source)
    	at java.lang.Integer.valueOf(Unknown Source)
    	at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:193)
    	at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:113)
    	at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:450)
    	at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:423)
    	at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:195)
    	at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:107)
    	at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:64)
    	... 38 more

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    蕃薯耀 2016年6月6日 17:58:30 星期一

    http://fanshuyao.iteye.com/

  • 相关阅读:
    模板--后缀自动机
    十二省NOI“省选”联考模测(第二场)A抽卡大赛
    BZOJ 1800: [Ahoi2009]fly 飞行棋
    BZOJ 1208: [HNOI2004]宠物收养所
    BZOJ 1876: [SDOI2009]SuperGCD
    BZOJ 1013: [JSOI2008]球形空间产生器sphere
    BZOJ 1011: [HNOI2008]遥远的行星
    BZOJ 1010: [HNOI2008]玩具装箱toy
    BZOJ 1008: [HNOI2008]越狱
    BZOJ 1007: [HNOI2008]水平可见直线
  • 原文地址:https://www.cnblogs.com/fanshuyao/p/6227123.html
走看看 - 开发者的网上家园