SpringMVC之@InitBinder註解詳解

說明與作用

springmvc並不是能對所有類型的參數進行綁定的,如果對日期Date類型參數進行綁定,就會報錯IllegalStateException錯誤。所以需要註冊一些類型綁定器用於對參數進行綁定。InitBinder註解就有這個作用。

@Controller
public class InitBinderController {

    @RequestMapping("/testInitBinder")
    private String testInitBinder(Date date){
        System.out.println("date = " + date);
        return "RequsetInitBindDemo";
    }
}

在這裏插入圖片描述
不能把String類型轉換爲Date類型報錯。

此時就需要一個日期類型轉換器。

@InitBinder
    public void dateTypeBinder(WebDataBinder webDataBinder){
        //往數據綁定器中添加一個DateFormatter日期轉化器。
        webDataBinder.addCustomFormatter(new DateFormatter("yyyy-mm-dd"));

    }

在這裏插入圖片描述
在這裏插入圖片描述
日期類型轉換成功了。

InitBinder註解:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface InitBinder {

	//指定參數名,這個不知控制器方法上形參的參數名,而是請求參數名,可以指定多個。指定後只有這些參數需要用到該轉換器。如果不指定,默認所有。
	String[] value() default {};

}

並且使用InitBinder 註冊的綁定器只有在當前Controller中才有效,不會作用於其他Controller。

在其他controller中定義一個接收請求的方法。

在這裏插入圖片描述
在這裏插入圖片描述
請求失敗。

使用@ControllerAdvice定義全局綁定器

可以使用@ControllerAdvice定義全局綁定器。ControllerAdvice的使用可以看文章

@ControllerAdvice
public class InitBinderAdviseController {

    @InitBinder
    public void dateTypeBinder(WebDataBinder webDataBinder){
        //往數據綁定器中添加一個DateFormatter日期轉化器。
        webDataBinder.addCustomFormatter(new DateFormatter("yyyy-mm-dd"));

    }
}

結果:
在這裏插入圖片描述
在這裏插入圖片描述
不同controller的方法都能作用到。

使用其他格式轉化器

我們可以自定義格式轉化器,實現Formatter接口就可。還可以添加驗證器等等。

public class StringFormatter implements Formatter<String> {
    private static final String PREFIX = "convertString == ";

    @Override
    public String parse(String text, Locale locale) throws ParseException {
    	//所以String類型參數都加上一個前綴。
        String result = PREFIX + text;
        return result;
    }

    @Override
    public String print(String object, Locale locale) {
        return object;
    }
}


添加
在這裏插入圖片描述

測試:

@RequestMapping("/testInitBinder2")
    private String testInitBinder1(String name){
        System.out.println("name = " + name);
        return "RequsetInitBindDemo";
    }

結果:
在這裏插入圖片描述
在這裏插入圖片描述
前綴有了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章