SpringMVCデータバインディング


一、基本タイプについてint基本データタイプが選択されている場合:1、keyは必須です.2、intタイプしかできません.例えば、パラメータage=abcを送ると、バックグラウンドは必ず400のエラーを報告します.パラメータメッセージがない場合、バックグラウンドは500のエラーを報告します.通常は@Request Param(value="age")と書くことができます.
   @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);
    }