1. 程式人生 > 實用技巧 >資料轉換&資料格式化&資料校驗

資料轉換&資料格式化&資料校驗

1.資料繫結流程① Spring MVC 主框架將 ServletRequest 物件及目標方法的入參例項傳遞給 WebDataBinderFactory 例項,以建立 DataBinder 例項物件② DataBinder 呼叫裝配在 Spring MVC 上下文中的 ConversionService 元件進行資料型別轉換、資料格式化工作。將 Servlet 中的請求資訊填充到入參物件中③呼叫 Validator 元件對已經綁定了請求訊息的入參物件進行資料合法性校驗,並最終生成資料繫結結果 BindingData 物件④Spring MVC 抽取 BindingResult 中的入參物件和校驗錯誤物件,將它們賦給處理方法的響應入參
圖解:
2.自定義型別轉換器
步驟如下:① 實現Converter<S,T>介面:將S型別物件轉換成T型別物件
public class TestCon implements Converter<String, Employee> {
    @Override
    public Employee convert(String s) {
        if(s != null){
            String[] vals = s.split("-");

            if(vals != null & vals.length == 4){

                String lastName = vals[0];
                String email = vals[1];
                Integer gender = Integer.parseInt(vals[2]);
                Department department = new Department();
                department.setId(Integer.parseInt(vals[3]));

                Employee employee = new Employee(null,lastName,email,gender,department);
                return employee;
            }
        }
        return null;
    }
}
②在SpringMVC配置檔案中配置轉換器
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean="testCon"/>
            </set>
        </property>
    </bean>
③將自定義的ConversionService註冊到Spring MVC的上下文中
    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
3.<mvc:annotation-driven /><mvc:annotation-driven /> 會自動註冊RequestMappingHandlerMapping RequestMappingHandlerAdapter ExceptionHandlerExceptionResolver 三個bean。還將提供以下支援:支援使用 ConversionService 例項對錶單引數進行型別轉換支援使用 @NumberFormat annotation、@DateTimeFormat 註解完成資料型別的格式化支援使用 @Valid 註解對 JavaBean 例項進行 JSR 303 驗證支援使用 @RequestBody 和 @ResponseBody 註解從圖中就能說明重要性@InitBinder由 @InitBinder 標識的方法,可以對 WebDataBinder 物件進行初始化。WebDataBinder 是 DataBinder 的子類,用 於完成由表單欄位到 JavaBean 屬性的繫結 @InitBinder方法不能有返回值,它必須宣告為void。@InitBinder方法的引數通常是是 WebDataBinder4.資料格式化使用步驟 ------------------------>主要針對數字型別、日期型別 比如①在對應的bean物件中的屬性上方加上註解就可以了 ------------------------------->就一步原理:Spring在格式化模組中定義一個實現ConversionService介面的FormattingConversionService實現類,該類擴充套件了GenericConverisonService,因此它既具有型別轉換的功能,又具有格式化的功能FormattingConversionService擁有FormattingConversionServiceFactotyBean工廠類,從而可以在Spring配置檔案中註冊構造FormattingConversionService。所以轉換器一般就直接配置
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"></bean>
5.JSR303 資料校驗JSR 303 是 Java 為 Bean 資料合法性校驗提供的標準框架,它已經包含在 JavaEE 6.0 中 .JSR 303 通過在 Bean 屬性上標註類似於 @NotNull、@Max 等標準的註解指定校驗規則,並通過標準的驗證介面對 Bean 進行驗步驟如下:①加入jar包②在需要資料校驗的部分新增如下註解③處理器部分,入參新增@valid註解
@RequestMapping(value = "/emp",method = RequestMethod.POST)
    public String save(@Valid Employee employee, BindingResult result,Map<String,Object> map){

        if(result.getErrorCount() > 0){

            System.out.println("出錯了");
            for(FieldError error:result.getFieldErrors()){
                System.out.println( error.getField() + ":" + error.getDefaultMessage());
            }

            //若驗證出錯則轉向定製頁面
            map.put("departments", departmentDao.getDepartments());
            return "input";
        }
        employeeDao.save(employee);
        return "redirect:/emps";
    }


來自為知筆記(Wiz)