SpringMVC學習筆記(四)
SpringMVC(四)
- SpringMVC資料的格式化
以Date格式為例
配置:
<mvc:annotation-driven></mvc:annotation-driven>
在類變數處用註解標註
@DateTimeFormat(pattern="yyyy-mm-dd")
private Date birth;
//pattern為輸入樣式
例2:
@NumberFormat(pattern="#,###,###.#")
輸入:1,234,567,8
輸出:1234567.8
- 當型別轉換失敗時,如何得到錯誤訊息
DataBinder會把錯誤資訊放入到BinderResult裡面,則可以在目標方法加入形參 BindingResult result
通過result的內建方法可以得到錯誤資訊。
@RequestMapping(value="/emp",method=RequestMethod.POST)
public String save(Employee employee,BindingResult result) {
if(result.getErrorCount() > 0) {
System.out.println("出錯啦!!");
for(FieldError error:result.getFieldErrors())
System.out.println(error.getField()+":"+error.getDefaultMessage ());
}
System.out.println("save:"+employee);
employeeDao.save(employee);
return "redirect:/emps";
}
- JSR303資料校驗
JSR303 通過在bean屬性上標註類似於@NotNull、@Max等標準的註解指定校驗規則,並通過標準的驗證介面對Bean進行驗證
HibernateValidator是JRS303的一個參考實現,除支援所有標準的校驗註解外,還支援以下擴充套件註解。
註解 | 功能 |
---|---|
被註釋的元素必須是電子郵箱地址 | |
@Length | 被註釋的字串的大小必須在指定的範圍內 |
@NotEmpty | 被註釋的字串必須為非空 |
@Range | 被註釋的元素必須在合適的範圍內 |
JSR 303校驗方法:
1、匯入hibernate Validator 的jar包,加入hibernate Validator 驗證框架
2、在SpringMVC 配置檔案中新增<mvc:annotation-driven/>
3、需要在bean的屬性上新增對應的註解
4、在目標方法bean型別的簽名新增@Valid註解
public String save(@Valid Employee employee,BindingResult result){
...
}
注意!!:需校驗的Bean物件和其繫結結果物件或錯誤物件是成對出現的,它們之間不允許宣告其他的入參
- SpringMVC錯誤訊息的顯示及國際化,錯誤後指向頁面
-顯示:可通過<form:erroes path="欄位名">
顯示錯誤資訊
-指向頁面:通過BindingResult的判斷來進行指向頁面的指定,必要可進行表單回顯。
public String save(@Valid Employee employee,BindingResult result,Map<String,Object> map) {
if(result.getErrorCount() > 0) {
map.put("departments", departmentDao.getDepartments());
map.put("employees", employeeDao.getAll());
return "add";
}
-定製國際化錯誤資訊顯示
當一個屬性校驗失敗後,校驗框架會為該屬性生成4個訊息程式碼,這些程式碼以校驗註解類名為字首,結合modelAttribute、屬性名及屬性型別名生成多個訊息程式碼。
當使用SpringMVC標籤顯示錯誤訊息時,SpringMVC會檢視WEB上下是否裝配了對應的國際化訊息,如果沒有,則會顯示預設的錯誤訊息,否則使用國際化訊息。
1、建立properties檔案定製
格式:
鍵:校驗註解名 . 類名(首字母小寫). 屬性名
值:提示的訊息
2、配置國際化資原始檔
SpringMVC配置檔案中:
例:errorsmsg.properties
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="errorsmsg"></property>
</bean>
提示訊息的國際化
若資料型別轉換或資料格式轉換時發生錯誤,或該有得引數不存在,或呼叫處理方法時發生錯誤,都會在隱含模型中建立錯誤訊息。其錯誤程式碼字首說明如下:
-required:不要引數不存在。如@RequiredParam(“param1”)標註了一個入參,但該引數不存在
-typeMismatch:在資料繫結時,發生資料型別不匹配的問題
-methodInvocation:SpringMVC在呼叫處理方法時發生了錯誤
- SpringMVC返回Json
1、加入jar包
2、編寫目標方法,返回JSON對應的物件或集合
3、加入註解@ResponseBody
@ResponseBody
@RequestMapping("/testJson")
public Collection<Employee> testJson(){
return employeeDao.getAll();
}
- HTTPMessageConverter< T >
使用HTTPMessageConverter< T >將請求資訊轉化並繫結到處理方法的入參中或將響應結果轉為對應型別的響應資訊,Spring提供了兩種途徑:
-使用@RequestBody / @ResponseBody 對處理方法進行標註
-使用HTTPEntity< T > / ResponseEntity< T > 作為處理方法的入參或返回值
當控制器處理方法使用到上面的標註時,Spring首先根據請求頭或響應頭的Accept屬性選擇匹配的HTTPMessageConverter,進而根據引數型別或泛型型別的過濾匹配的HTTPMessageConverter,若找不到可用的HTTPMessageConverter將報錯。
注意::@RequestBody和@ResponseBody不需要成對出現
@RequestBody / @ResponseBody :可實現上傳功能
HTTPEntity< T > / ResponseEntity< T > :可實現下載功能
- 國際化
關於國際化:
1、在頁面上能夠根據瀏覽器語言設定的情況對文字,時間,數值進行本地化處理
2、可以在bean中獲取國際化資原始檔locale對於的訊息
3、可以通過超連結切換Locale,而不再依賴於瀏覽器的語言設定情況
解決:
1、使用JSTL的fmt標籤
分別設定對應的資原始檔
2、在bean中注入ResourceBundleMessageSource的示例,使用其對應的getMessage方法即可
3、配置LocalResolver和LocaleChangeInterceptor