SpringMVC——全局异常和日期类型处理

导读:本篇文章讲解 SpringMVC——全局异常和日期类型处理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一,SpringMVC处理全局异常

1.1 使用@ExceptionHandler注解

第一步:创建一个基类的BaseController,用来实现全局异常。

使用@ExceptionHandler注解标注handleException()方法。

package com.lmc.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;

public class BaseController {
	
	@ExceptionHandler
	public String handleException(HttpServletRequest req, Exception ex){
		return "error";
	}

}

注意:handleException() 方法有两个参数,不能省略。

  • request:当前发生异常的请求
  • exception:异常对象

第二步:定义一个普通控制器,继承BaseController基类

package com.lmc.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.RequestMapping;

@org.springframework.web.bind.annotation.RestController
public class RestController extends BaseController {
	
	@RequestMapping("hello")
	public String sayHello(){
		if(true) throw new RuntimeException();
		return "say hello";
	}

}


1.2自定义异常处理类

第一步:创建一个自定义异常处理类

public class MyExceptionHandler implements HandlerExceptionResolver {

	@Override
	public ModelAndView resolveException(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex) {
		ModelAndView mv = new ModelAndView();
		mv.addObject("msg", "服务器发生异常,请稍后再试!");
		mv.setViewName("error");
		//输出异常的跟踪信息
		ex.printStackTrace();
		return mv;
	}

}

第二步:在SpringMVC配置文件中配置该异常处理类

bean class="com.lmc.MyExceptionHandler"/>

二,SpringMVC日期类型处理

如果表单提交过来的数据是日期格式,但是控制器使用Date类型接收该参数时,会提示类型转换失败。

解决方法:

2.1 使用@DateTimeFormat

(1)使用@DateTimeFormat指定转换格式

public class User{
    private String name;
    private String password;
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date birthday;
}

(2)控制器中加入一段数据绑定代码。

@Controller
public class UserController{
    @InitBinder
    public void init(WebDataBinder binder){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    binder.regiesterCustomEditor(Date.class,new CustomDateEditor(sdf,true));
    }
    
}

这样每次访问该控制器方法的时候都会执行@InitBinder绑定的方法

2.2 配置全局日期类型转换器

首先,定义一个日期转换器类,该类实现Converter接口。

package com.lmc.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

/**
 * 对提交的表单日期字符串类型转换成日期类型
 * @author Administrator
 *
 */
@Component
public class DateConverter implements Converter<String, Date> {

	@Override
	public Date convert(String date) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		try {
			return format.parse(date);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

}

然后在Spring的配置文件中进行配置

<!-- 启动注解功能 -->
    <mvc:annotation-driven conversion-service="dateConvertor"/>
    
    <!-- 定义全局的日期转换器 -->
    <bean id="dateConvertor" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    	<property name="converters">   
    		<list>
    			<bean class="com.lmc.utils.DateConverter"/>
    		</list>
    	</property>
    </bean>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81661.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!