SpringMVCデータバインディング
一、基本タイプについてint基本データタイプが選択されている場合:1、keyは必須です.2、intタイプしかできません.例えば、パラメータage=abcを送ると、バックグラウンドは必ず400のエラーを報告します.パラメータメッセージがない場合、バックグラウンドは500のエラーを報告します.通常は@Request Param(value="age")と書くことができます.
二、配列バックエンドコード:
三、マルチレベルデータオブジェクトバインディング
四、同じ階層の複数のオブジェクトはどうやって結合されますか?
呼び出したURLの方式は以下の通りです.http://localhost:8080/TimOne/account/mulObject.do?user.name=tom&use.age=10&admin.name=admin&admin.age=21
五、Listのデータバインディング
六、フロントエンド転送2015-01-01 12:01:23フォーマットで、バックエンドは直接java.util.Dateタイプで受信する場合、コントローラに下記のコードを追加する必要があります.
@RequestMapping("/int")
@ResponseBody
public String getInt(@RequestParam(value="age") int age){
return "age:"+age;
}
そのため、パッケージタイプのIntegerを選択できます. @RequestMapping("/integer")
@ResponseBody
public String getInteger(String age){
return "age:"+age;
}
パッケージタイプを使用する利点の一つは、フロントエンドがこのパラメータを渡すかどうかに関わらず、エラーが発生しません.このパラメータを渡さないとnullとなります.二、配列バックエンドコード:
@RequestMapping(value="array.do")
@ResponseBody
public String array(String[] name){
StringBuilder sbf = new StringBuilder();
for(String item:name){
sbf.append(item).append(" ");
}
return sbf.toString();
}
フロントエンドリレーのurlフォーマットは以下の通りです.http://localhost:8080/TimOne/account/array.do?name=tom&name=tim&name=lucy 三、マルチレベルデータオブジェクトバインディング
@RequestMapping("/object")
@ResponseBody
public String Object(User user){
return user.toString();
}
このうち、User類の実体は:public class User {
private String name;
private Integer age;
private ContactInfo contactInfo;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public ContactInfo getContactInfo() {
return contactInfo;
}
public void setContactInfo(ContactInfo contactInfo) {
this.contactInfo = contactInfo;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", contactInfo=" + contactInfo + "]";
}
}
Userに含まれるContactInfoのエンティティ類は、public class ContactInfo {
private String phone;
private String address;
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "ContancInfo [phone=" + phone + ", address=" + address + "]";
}
}
対応するコールURLは以下の通りです.http://localhost:8080/TimOne/account/object.do?name=tom&age=10&contactInfo.phone=10086&contactInfo.address=fuzhou 四、同じ階層の複数のオブジェクトはどうやって結合されますか?
@RequestMapping("/mulObject")
@ResponseBody
public String Object(User user, Admin admin){
return user.toString() + " " + admin.toString();
}
@InitBinder("user")
public void initUser(WebDataBinder binder){
binder.setFieldDefaultPrefix("user.");
}
@InitBinder("admin")
public void initAdmin(WebDataBinder binder){
binder.setFieldDefaultPrefix("admin.");
}
このうち、UserとAdminはそれぞれnameとageの属性を含んでいる.initBinderを用いてプレフィックスバインディングを行った.呼び出したURLの方式は以下の通りです.http://localhost:8080/TimOne/account/mulObject.do?user.name=tom&use.age=10&admin.name=admin&admin.age=21
五、Listのデータバインディング
@RequestMapping("/list")
@ResponseBody
public String getList(UserListForm userListForm){
return "listSize:" + userListForm.getUsers().size() + " " + userListForm.toString();
}
このうち、UserListFormの実体類は:package cn.tim.module.shop.controller;
import java.util.List;
public class UserListForm {
private List<User> users;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
@Override
public String toString() {
return "UserListForm [users=" + users + "]";
}
}
該当URLの呼び出し方式:http://localhost:8080/TimOne/account/list.do?users[0].name=tim&users[0].age=12&users[1].name=canny&users[1].age=12注意して、上で呼び出した時に、usersと書いてあります.六、フロントエンド転送2015-01-01 12:01:23フォーマットで、バックエンドは直接java.util.Dateタイプで受信する場合、コントローラに下記のコードを追加する必要があります.
/** * */
@InitBinder
public void initBinder(ServletRequestDataBinder bin){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
CustomDateEditor cust = new CustomDateEditor(sdf, true);
bin.registerCustomEditor(Date.class, cust);
}
バックエンドコールのコードは以下の通りです. @RequestMapping("/date")
@ResponseBody
public String getDateTime(Date date){
return " :" + DateUtil.format(date, DateUtil.DATETIME_YMDHMS);
}