SpringMVC——グローバル異常と日付タイプ処理

16155 ワード

一、SpringMVCはグローバル異常を処理します.
1.1@Exception Handlerを使って注釈する
第一歩:ベースクラスのBaseControllerを作成して、グローバル異常を実現します.
@Exception Handlerでhandlee Exception()メソッドを表記します.
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:異常対象
  • 第二ステップ:普通のコントローラを定義し、ベースクラスを引き継ぐ
    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カスタム異常処理類
    ステップ1:カスタム異常処理クラスを作成します.
    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;
    	}
    
    }
    
    
    第二ステップ:SprigMVCプロファイルにこの異常処理クラスを配置する
    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グローバル日付タイプ変換器の設定
    まず、Coverterインターフェースを実現する日付変換器クラスを定義します.
    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>