`

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/

  • 大小: 31.7 KB
1
0
分享到:
评论

相关推荐

    springmvc注解式控制器的数据验证、类型转换及格式化 SpringMVC数据验证

    除此之外,Spring MVC还支持自定义拦截器(`HandlerInterceptor`),可以全局地处理参数转换、验证等操作,进一步提高了代码的复用性和灵活性。 总结来说,Spring MVC的注解式控制器提供了强大的数据验证、类型转换...

    springMVC学习

    SpringMVC 提供了类型转换机制,可以将请求参数转换为 Java 对象。类型转换机制可以帮助开发者更方便地处理请求参数。 八、JSON 格式数据的输入和输出 SpringMVC 提供了 JSON 格式数据的输入和输出机制,可以帮助...

    springmvc.pdf

    6. **类型转换与格式化**:Spring MVC 内置了类型转换器和格式化器,可以轻松处理不同类型的数据转换和格式化需求。 #### 六、处理器拦截器详解 **处理器拦截器(HandlerInterceptor)** 是 Spring MVC 提供的一种...

    springmvc 其他引用资源(reference)

    - 自动类型转换:Spring MVC 提供自动将请求参数转换为方法参数的能力。 - 数据验证:使用 @Valid 和 Validation 对象进行客户端和服务器端的数据验证。 - 模型属性:@ModelAttribute 注解用于在请求之间共享数据...

    springmvc+fastjson demo

    6. **错误处理**:在实际应用中,还需要考虑 JSON 数据格式错误或对象转换异常的情况,可以使用异常处理器来捕获并处理这些问题。 7. **平台-springmvc-webapp**:这个名字可能指的是项目中的一个模块或目录,可能...

    ssm_springmvc_canshu

    描述中提到,由于日期数据可以有多种不同的格式,Spring MVC默认的参数绑定机制无法直接将字符串参数转换为日期类型,因此需要我们自定义参数绑定策略来解决这个问题。 首先,我们需要理解Spring MVC的模型绑定机制...

    springmvc 4.1.2jar包

    8. **异常处理**:Spring MVC允许开发者自定义异常处理器,可以优雅地处理应用程序中的异常情况,并提供定制化的错误页面。 9. **国际化和主题支持**:Spring MVC提供国际化的支持,可以根据用户的语言设置显示相应...

    详解SpringMVC的类型转换及验证方法

    - **错误处理**:如果类型转换或验证失败,Spring MVC会捕获异常,并将其信息存储在`BindingResult`对象中。开发者可以在控制器方法中接收这个对象,以获取并处理错误信息。 综上所述,Spring MVC的类型转换和验证...

    springMVC_核心技术总结

    这使得我们能优雅地捕获并处理各种异常,同时返回自定义的错误页面或者JSON响应。 5. **Log4j**:Log4j是一个广泛使用的日志记录库,它允许开发者灵活地控制日志信息的输出级别、格式和目的地。在Spring MVC项目中...

    Spring MVC 3.0实战指南.ppt

    《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及解析器 7...

    SpringMVC中使用JSON传递数据时用的jar包

    Spring MVC提供了`@ExceptionHandler`注解来处理这些异常,你可以自定义异常类,并在Controller中捕获并返回友好的错误信息。 7. **MessageConverter**:Spring MVC使用`HttpMessageConverter`来处理请求和响应的...

    springmvc-json_v2.zip

    当JSON序列化或反序列化过程中出现错误时,Spring MVC会抛出异常。我们可以自定义异常处理器,捕获这些异常并返回友好的错误信息。 6. **RESTful API设计**: 使用Spring MVC开发RESTful API时,JSON是首选的数据...

    Spring in Action(第2版)中文版

    第二部分企业spring 第5章使用数据库 5.1spring的数据访问哲学 5.1.1了解spring数据访问的异常体系 5.1.2数据访问的模板化 5.1.3使用dao支持类 5.2配置数据源 5.2.1使用jndi数据源 5.2.2使用数据源连接池 ...

    SpringMVC精品资源--将kettle集成值web应用中,不再需打开kettle窗口运行,采用springmv.zip

    4. **参数传递**:如果需要,你可能需要通过URL参数或请求体传递Kettle作业或转换的路径、参数等信息到控制器。 5. **监控和日志**:在控制器中添加适当的逻辑,记录任务的执行状态和错误信息,以便于监控和调试。 ...

    spring_-mvc-master.zip

    Spring MVC提供了一套完整的异常处理机制,包括全局异常处理器和自定义异常类型,确保程序在遇到错误时能够优雅地处理。 通过以上知识,初学者可以逐步掌握Spring MVC的基本概念和使用方法,从而开发出高效、模块...

    实验报告5-资料.rar

    11. **异常处理**:SpringMVC提供了统一的异常处理机制,允许开发者自定义错误页面或处理程序,提高用户体验。 12. **Ajax支持**:SpringMVC可以轻松集成jQuery、AngularJS等JavaScript库,实现异步数据交互。 在...

    分享Java知识库

    下面是一些在Java中较为常见的异常类型及其处理方法: 1. **NullPointerException** - **定义**:当尝试访问一个未初始化或已被设为null的对象的属性或方法时,会抛出此异常。 - **处理方法**:确保对象在使用...

    上传文件必备jar包-commons.fileupload-1.2.1.jar和commons.io-1.4.0.jar

    4. **异常处理**:提供了一套完整的异常体系,帮助开发者处理上传过程中的错误。 `commons-io-1.4.0.jar` 是Apache Commons IO库的一个版本,它提供了大量与I/O操作相关的工具类和实用方法。在文件上传场景中,它...

    1剑盛二面准备试题.txt1剑盛二面准备试题.txt

    70. **SpringMVC与Struts的区别**:SpringMVC是一个更轻量级的Web框架,与Spring框架的整合度更高,提供更好的性能。Struts是一个基于MVC模式的重量级框架。 71. **避免SQL注入的方法**:使用预处理语句...

    自整理Java关于基础和框架的面试题

    - **SpringMVC**与Spring无缝集成,简化了Web应用的开发。 ##### Hibernate中get和load的区别 - **get**:立即加载,如果找不到对象抛出异常。 - **load**:延迟加载,如果找不到对象返回`null`。 ##### Hibernate...

Global site tag (gtag.js) - Google Analytics