文档章节

springMVC的数据绑定

新年
 新年
发布于 2016/07/08 10:27
字数 1236
阅读 84
收藏 1

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")
@ResponseBody
public 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<User> users;
     //getter, setter, toString function...
}


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

@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判定相同,否则抛异常

    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"})
@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 :删除资源, 具有幂等性

© 著作权归作者所有

新年
粉丝 7
博文 84
码字总数 46086
作品 0
海淀
程序员
私信 提问
SpringMVC+Spring+Mybatis整合应用(1)

以用户管理系统的开发为例,详细介绍SpringMVC+Spring+Mybatis的整合,并在编写controller的过程中记录SpringMVC中的一些高级应用(会特别标示) 1. 项目整合搭建过程 1. 项目需求:主要实现...

江左煤郎
2018/11/29
0
0
SpringMVC开发 知识点速查

SpringMVC入门 什么是SpringMVC 实现MVC设计模式的框架 SpringMVC核心组件 DispatcherServlet 前置控制器,调度 Handler 处理器,完成具体业务逻辑 HandlerMapping 将请求映射到Handler,映射...

linxinzhe
2018/05/19
0
0
Spring Data Redis 详解及实战一文搞定

SDR - Spring Data Redis的简称。 Spring Data Redis提供了从Spring应用程序轻松配置和访问Redis的功能。它提供了与商店互动的低级别和高级别抽象,使用户免受基础设施问题的困扰。 Spring B...

Java技术栈
2018/09/10
0
0
SpringMVC报错The request sent by the client was synt

SpringMVC数据绑定是一个很好的东西,在数据绑定的时候一定要主意Controller方法中的参数名和jsp页面里的参数名字是否一致或者按照绑定的规范来写,如果不一致,可能报如下错误: The reques...

RJKD
2014/04/21
0
0
SpringMVC 基于注解的Controller @RequestMapping @Request

概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能。现在你无须让 Controller 继承任何接口,无需在 XML 配置文件中定义请求和 Controller...

蓝狐乐队
2014/02/28
0
1

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL build

https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=lumpsucker&dt=2019-06-23%2020%3A57%3A27...

MtrS
今天
3
0
八、Docker Swarm

Docker Swarm有两件事:一个企业级的Docker主机安全集群,另一个是用于协调微服务应用程序的引擎。 在集群方面,它将一个或多个Docker节点组合在一起,并允许你将他们作为一个集群来管理。开...

倪伟伟
昨天
7
0
Fragment懒加载其实很简单

前言 记得去年面试的时候, 面了一家小公司, 那个面试官问我, fragment的懒加载做过吗?我说没做过(确实没做过).后来面试快结束了, 又问我, 懒加载没做过是吗?后来可想而知也没收到offer, (ಥ_...

天王盖地虎626
昨天
5
0
聊聊dubbo的TimeoutFilter

序 本文主要研究一下dubbo的TimeoutFilter ListenableFilter dubbo-2.7.2/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/ListenableFilter.java public abstract class Liste......

go4it
昨天
9
0
方法与数组

方法 方法就是完成特定功能的代码块;在很多语言里面都有函数的定义,函数在Java中被称为方法 格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) throw 异常{ 函数体;...

凹凸凸
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部