SpringMVC——グローバル異常と日付タイプ処理
16155 ワード
一、SpringMVCはグローバル異常を処理します.
1.1@Exception Handlerを使って注釈する
第一歩:ベースクラスのBaseControllerを作成して、グローバル異常を実現します.
@Exception Handlerでhandlee Exception()メソッドを表記します. request:現在異常が発生している要求 exception:異常対象 第二ステップ:普通のコントローラを定義し、ベースクラスを引き継ぐ
ステップ1:カスタム異常処理クラスを作成します.
フォームから送信されたデータが日付形式である場合、コントローラがDateタイプでこのパラメータを受信した場合、タイプ変換に失敗したと警告します.
解決方法:
2.1@DateTimeFormatを使う
(1)@DateTimeFormatを使って変換フォーマットを指定する
2.2グローバル日付タイプ変換器の設定
まず、Coverterインターフェースを実現する日付変換器クラスを定義します.
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()方法には二つのパラメータがあります.省略できません.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>