springMVC的数据绑定

springMVC的数据绑定java

1. 基本类型
    1.1 好比int和Integer如何去选择做为Controller方法的入参
    1.2 在入参上加上注解@RequestParam,
    1.3 @RequestParam注解几个设置
         1.3.1 value如何应用,value就是参数的别名, 并且http参数只能以别名传参
         1.3.2 required为true,表示这个参数是必须传值的,
         1.3.3 defaltValue的设置,是否设置默认值spring

2. 数组做为Controller方法传参
    1.1 例子传参 : http://localhost:8080/array.do?name=Tom&name=Lucy&name=Jimjson

3. Object做为Controller方法传参
    1.1 普通url例子传参: http://localhost:8080/object.do?name=Tom&age=10
    1.2 若是Object的属性也是一个对象的传参
            http://localhost:8080/object.do?name=Tom&age=10&contactInfo.phone=10086
    1.3 若是Controller的入参有2个Object,而且这两个Object有同名称的属性,为了区分不一样的Object的属性
         1.3.1 url能够是: http://localhost:8080/object.do?user.name=Tom&admin.name=Lucy&age=10
         1.3.2 须要用到注解InitBinder,并写一个方法表示在Controller方法执行前执行数组

@InitBinder("user")   //注解的value值对应执行方法的入参名称
public void initUser(WebDataBinder binder){  //方法的传参是WebDataBinder
      binder.serFieldDefaultPerfix("user.");            //设置默认的前缀
}
@InitBinder("admin")//注解的value值对应执行方法的入参名称
public void initAdmin(WebDataBinder binder){
      binder.serFieldDefaultPerfix("admin.");
}


        1.3.3 则Controller方法以下服务器

@RequestMapping(value="object.do")
@ResponseBody
public String object(User user, Admin admin){
     return user.toString() + ", " + admin.toString();
}

4. 集合的绑定
    4.1 List的绑定
        4.1.1  List必须做为某个javaben的属性,好比mvc

public class UsersForm{
     private List<User> users;
     //getter, setter, toString function...
}


        4.1.2 而后Controller方法就能够接收这个包含List集合做为属性的javabean为入参了app

@RequestMapping(value="list.do")
@ResponseBody
public String list(UsersForm usersForm){
    return "users.size :" + usersForm.users.size() + ",  all users :" 
             + usersForm.users.toString();
}


        4.1.3 那么url传参能够是这个样子的
                http://localhost:8080/list.do?users[0].name=Tom&users[1].name=Lucy&users[20].name=Jerry
        4.1.4  注意
                在url传参的时候,下标索引不要中间出现中断的数字,好比不要出现如上的从0,1直接到20的状况,虽然不会报错,可是建立中的2到19的元素的javabean
   4.2 Set集合的绑定
        4.2.1 Set一样须要做为某个javabean的属性,和List不一样的是,必须在javabean的构造方法里为Set属性初始化
        4.2.2 Controller方法的处理同List绑定的Controller方法
        4.2.3 url传参时, 
            4.2.3.1参数的下标不能中断, 
            4.2.3.2 在Set集合中的元素在复写hashCode方法以后,url传参的元素传给Set以后的元素不能hashCode断定相同,不然抛异常ui

    4.3 Map集合的绑定
        4.3.1   Map也和List同样,必须做为某个JavaBean 的属性
        4.3.2   Controller方法同List绑定的Controller方法
        4.3.3 传参例子以下:  中括号中的是key,等号后的为value
                http://localhost:8080/map.do?users['x'].name=Tom&users['y'].name=Lucy     url

5. json和xml数据绑定 
    5.1 对http头必须设置content-type
            json设置的content-type="application/json"
            xml设置的content-type="application/xml" 
    5.2 经过Post传参, json的数据绑定须要用到RequestBody注解,这个注解用于读取body部分的数据code

@RequestMapping(value={"json.do","xml.do"})
@ResposeBody
public String json(@RequestBody User user){
    return user.toString();
}


6. 数据转换,格式化
    6.1 PropertyEditor接口, 默认实现类PropertyEditorSupport,主要方法setValue, getValue, setAsText
        6.1.1 将一段字符串解析成一个javabean,或者将一个javabean转换成一个字符串
        6.1.2 有不少默认的数据转换实现, 好比对Date的实现

           

@RequestMapping(value="date1.do")
@ResponseBody
public String date1(Date date1){
    return date1.toString();
}
//对如上的Controller处理方法,须要对入参的Date进行数据转换设置
@InitBinder("date1")
public void initDate1(WebDateBinder binder){
     binder.registerCustomEditor(                                //注册一个针对传参名称为date1的一个转换器
         Date.class,                                                         //转换的目标类型
         new CustomDateEditor(                                   //一个springmvc默认提供的Date转换器
             new SimpleDateFormatter("yyyy-MM-dd"),    //字符串格式
             true)                                                                 //true表示转换器能够处理null,空字符串等
     );
}

      6.2 全局的转化器
        6.2.1 Formatter
            新建一个类实现Formatter接口

public class MyDateFormatter implements Formatter<Date> {
    public Date parse(String text, Locale locale) throws ParseException{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.parse(test);
    }
    public String print(Date obj, Locale locale){
        return null;
    }
}

        6.2.2 Converter

public class MyDateConverter implements Converter<String, Date>{
      public Date convert(String source){
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
           try{
              return sdf.parse(source);
            }catch(ParseException ex){ex.printStackTrace;};
       }
       return null;
}

  7 RESTful
      7.1 相似于这样的url
            http://movie.douban.com/show/subject/11345/
       7.2  对应的Controller的处理方法
                须要用到注解 @PathVariable

@RequestMapping(value="/subject/{subjectId}")       
@ResponseBody
public String subject(@PathVariable("subjectJd") String subjectId){
     return subjectId;
}


      7.3 全称:  Representational State Transfer (资源)表现层状态转换
                7.3.1 资源,好比url只表示资源实体,并不表明资源的展示形式
                7.3.2 资源的展示形式,经过http头的content-type/accept来在客户端和服务器之间控制
                7.3.3 RESTful的状态转换
                    概念: 幂等性: 相同的URL,相同的参数的http请求,返回的响应相同

                    GET    :获取资源 , 具备幂等性                     POST :建立资源 , 不具备幂等性                     PUT    :建立或者更新资源, 具备幂等性                     DELETE :删除资源, 具备幂等性

相关文章
相关标签/搜索