博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springMVC的数据绑定
阅读量:6517 次
发布时间:2019-06-24

本文共 4620 字,大约阅读时间需要 15 分钟。

hot3.png

springMVC的数据绑定

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的设置,是否设置默认值

2. 数组作为Controller方法传参

    1.1 例子传参 : http://localhost:8080/array.do?name=Tom&name=Lucy&name=Jim

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")@ResponseBodypublic String object(User user, Admin admin){     return user.toString() + ", " + admin.toString();}

4. 集合的绑定

    4.1 List的绑定
        4.1.1  List必须作为某个javaben的属性,比如

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

        4.1.2 然后Controller方法就可以接收这个包含List集合作为属性的javabean为入参了

@RequestMapping(value="list.do")@ResponseBodypublic 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判定相同,否则抛异常

    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     

5. json和xml数据绑定 

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

@RequestMapping(value={"json.do","xml.do"})@ResposeBodypublic 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")@ResponseBodypublic 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
{    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
{      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}")       @ResponseBodypublic 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 :删除资源, 具有幂等性

转载于:https://my.oschina.net/wangxnn/blog/708145

你可能感兴趣的文章
说说云计算与移动管理
查看>>
T-Mobile美国使用28GHz频段测试5G
查看>>
如何缓解影子云服务安全风险?
查看>>
Bossies 2016:最佳开源大数据工具
查看>>
银行卡信息安全事件频发 互联网站成数据泄露"重灾区"
查看>>
云服务器 ECS 使用OpenAPI管理ECS:使用OpenAPI弹性创建ECS实例
查看>>
象云2.0产品发布暨国产操作系统首次入驻公有云
查看>>
一个完美DCIM应该具备的功能与价值
查看>>
《SEO的艺术(原书第2版)》——1.5 人们如何搜索
查看>>
经验贴 | 电梯监控的布线技巧
查看>>
唐山联通与丰南区政府签署“智慧城市”战略合作协议
查看>>
研究显示:广告拦截应用正在破坏互联网
查看>>
优云·小课堂 第八期:运维自动化的魅力
查看>>
稳定+性能+价格,阿里云发力ECS企业级产品
查看>>
写个软件来防止服务器网站CPU百分百
查看>>
智能城市里,“公共电话亭”的存在意味着什么?
查看>>
JVM分代垃圾回收策略的基础概念
查看>>
《交互式程序设计 第2版》一3.5 捕获简单用户交互行为
查看>>
安装操作系统需要注意的事项
查看>>
5G技术的5大猜想
查看>>