zoukankan      html  css  js  c++  java
  • SpringMVC框架的注解如何使用?

    SpringMVC 参数绑定的方式

    • 基本数据类型、字符串数据绑定
    • 数组类型
    • vo 类型
    • list 类型
    • set 类型
    • Map 类型数据
    • 自定义复合类型

    案例实操

    请求参数到处理器功能处理方法的方法参数上的绑定,对于参数绑定非常灵活

    a).基本数据类型、字符串数据绑定

    /** 
    
    * 简单数据类型 值必须存在 不传可以通过默认值代替 
    
    */ 
    
    @RequestMapping("data1") 
    
    public void data1(@RequestParam(defaultValue="10",name="age")int age, 
    @RequestParam(defaultValue="1",name="flag")boolean flag, 
    @RequestParam(defaultValue="100",name="s")double s){ 
    
    	System.err.println("age:"+age+":flag:"+flag+":s:"+s); 
    
    } 
    
    /** 
    
    * 包装类型 值可以为空 
    
    */ 
    
    @RequestMapping("data2") 
    
    public void data2(Integer age,Double s){ 
    
    	System.err.println("age:"+age+":s:"+s); 
    
    } 
    
    /** 
    
    * 字符串注入 
    
    * @param str 
    
    */ 
    
    @RequestMapping("data3") 
    
    public void data3(String str){ 
    
    	System.err.println("str:"+str); 
    
    } 
    

    b).数组类型

    @RequestMapping("/dataTest3") 
    
    public void getParamsData3(@RequestParam(value="ids")String[] ids){ 
    
        for(String id:ids){ 
    
        	System.out.println(id+"---"); 
    
        } 
    
    } 
    

    c).vo 类型

    @RequestMapping("/dataTest4") 
    
    public void getParamsData4(User user){ 
    
    	System.out.println(user); 
    
    } 
    

    d).list 类型

    此时 user 实体需要定义 list 属性

    import java.util.ArrayList; 
    
    import java.util.List; 
    
    public class User { 
    
        private int id; 
    
        private String userName; 
    
        private String userPwd; 
    
        private List<Phone> phones=new ArrayList<Phone>(); 
    
        public List<Phone> getPhones() { 
    
        	return phones; 
    
        } 
    
        public void setPhones(List<Phone> phones) { 
    
        	this.phones = phones; 
    
        } 
    
        public int getId() { 
    
        	return id; 
    
        } 
    
        public void setId(int id) { 
    
        	this.id = id; 
    
        } 
    
        public String getUserName() { 
    
        	return userName; 
    
        } 
    
        public void setUserName(String userName) { 
    
        	this.userName = userName; 
    
        } 
    
        public String getUserPwd() { 
    
        	return userPwd; 
    
        } 
    
        public void setUserPwd(String userPwd) { 
    
        	this.userPwd = userPwd; 
    
        } 
    
        @Override 
    
        public String toString() { 
    
        	return "User [id=" + id + ", userName=" + userName + ", userPwd=" 
    
        + userPwd + ", phones=" + phones + "]"; 
    
        } 
    
    } 
    

    Phone 实体

    public class Phone { 
    
        private String num; 
    
        public String getNum() { 
    
        	return num; 
    
        } 
    
        public void setNum(String num) { 
    
        	this.num = num; 
    
        } 
    
        @Override 
    
        public String toString() { 
    
        	return "Phone [num=" + num + "]"; 
    
        } 
    
    }
    

    Jsp 页面定义

    <form action="dataTest5.do" method="post"> 
    
        <input name="phones[0].num" value="123456" /> 
    
        <input name="phones[1].num" value="4576" /> 
    
        <button type="submit"> 提交</button> 
    
    </form> 
    

    Controller 方法:

    @RequestMapping("/dataTest5") 
    
    public void getParamsData5(User user){ 
    
    	System.out.println(user); 
    
    } 
    

    e).set 类型

    ​ set 和 List 类似,也需要绑定在对象上,而不能直接写在 Controller 方法的参数中。但是,绑定 Set 数据时,必须先在 Set 对象中 add 相应的数量的模型对象。

    无序存储的原因

    public class User { 
    
        private int id; 
    
        private String userName; 
    
        private String userPwd; 
    
        private Set<Phone> phones=new HashSet<Phone>(); 
    
        public User() { 
    
            phones.add(new Phone()); 
    
            phones.add(new Phone()); 
    
            phones.add(new Phone()); 
    
        } 
    
        public int getId() { 
    
        	return id; 
            
        } 
    
        public void setId(int id) { 
    
        this.id = id; 
    
        } 
    
        public String getUserName() { 
    
        	return userName; 
    
        } 
    
        public void setUserName(String userName) { 
    
        	this.userName = userName; 
    
        } 
    
        public String getUserPwd() { 
    
        	return userPwd; 
    
        } 
    
        public void setUserPwd(String userPwd) { 
    
        	this.userPwd = userPwd; 
    
        } 
    
        public Set<Phone> getPhones() { 
    
        	return phones; 
    
        } 
    
        public void setPhones(Set<Phone> phones) { 
    
        	this.phones = phones; 
    
        } 
    
    }
    

    Controller 方法:

    @RequestMapping("/dataTest6") 
    
    public void getParamsData6(User user){ 
    
    	System.out.println(user); 
    
    } 
    

    表单页面

    <form action="dataTest6.do" method="post"> 
    
        <input name="phones[0].num" value="123456" /> 
    
        <input name="phones[1].num" value="4576" /> 
    
        <input name="phones[2].num" value="4576" /> 
    
        <button type="submit"> 提交</button> 
    
    </form> 
    

    f).Map 类型数据

    Map 最为灵活,它也需要绑定在对象上,而不能直接写在 Controller 方法的参数中。

    public class User { 
    
        private int id; 
    
        private String userName; 
    
        private String userPwd; 
    
        private Set<Phone> phones=new HashSet<Phone>(); 
    
        private Map<String, Phone> map=new HashMap<String, Phone>(); 
    
    	public User() { 
    
            phones.add(new Phone()); 
    
            phones.add(new Phone()); 
    
            phones.add(new Phone()); 
    
        }  
    
        public int getId() { 
    
        	return id; 
    
        } 
    
        public void setId(int id) { 
    
        	this.id = id; 
    
        } 
    
        public String getUserName() { 
    
        	return userName; 
    
        } 
    
        public void setUserName(String userName) { 
    
        	this.userName = userName; 
    
        } 
    
        public String getUserPwd() { 
    
        	return userPwd; 
    
        } 
    
        public void setUserPwd(String userPwd) { 
    
        	this.userPwd = userPwd; 
    
        } 
    
        public Set<Phone> getPhones() { 
    
        	return phones; 
    
        } 
    
        public void setPhones(Set<Phone> phones) { 
    
        	this.phones = phones; 
    
        } 
    
        public Map<String, Phone> getMap() { 
    
        	return map; 
    
        } 
    
        public void setMap(Map<String, Phone> map) { 
    
        	this.map = map; 
    
        } 
    
    }
    

    Controller 方法:

    @RequestMapping("/dataTest7") 
    
    public void getParamsData7(User user){ 
    
        Set<Entry<String, Phone>> set=user.getMap().entrySet(); 
    
        for(Entry<String, Phone> entry:set){ 
    
        	System.out.println(entry.getKey()+"--"+entry.getValue().getNum()); 
    
        }  
    
    } 
    

    表单页面

    <form action="dataTest7.do" method="post"> 
    
        <input name="map['1'].num" value="123456" /> 
    
        <input name="map['2'].num" value="4576" /> 
    
        <input name="map['3'].num" value="4576" /> 
    
        <button type="submit"> 提交</button> 
    
    </form> 
    

    g).自定义复合类型

    user 实体 引用 Phone 实体

    public class User { 
    
        private int id; 
    
        private String userName; 
    
        private String userPwd; 
    
        private Phone phone; 
    
        public int getId() { 
    
        	return id; 
    
        } 
    
        public Phone getPhone() { 
    
        	return phone; 
    
        } 
    
        public void setPhone(Phone phone) { 
    
        	this.phone = phone; 
    
        } 
    
        public void setId(int id) { 
    
        	this.id = id; 
    
        } 
    
        public String getUserName() { 
    
        	return userName; 
    
        } 
    
        public void setUserName(String userName) { 
    
        	this.userName = userName; 
    
        } 
    
        public String getUserPwd() { 
    
        	return userPwd; 
    
        } 
    
        public void setUserPwd(String userPwd) { 
    
        	this.userPwd = userPwd; 
    
        } 
    }
    

    Controller 方法:

    @RequestMapping("/dataTest8") 
    
    public void getParamsData8(User user){ 
    
        System.out.println(user.getUserName()+"---"+user.getUserPwd()+"-"+user.getPhone().getNum()); 
    
    } 
    

    表单页面

    <form action="dataTest8.do" method="post"> 
    
        <input name="userName" value="123456" /> 
    
        <input name="userPwd" value="4576" /> 
    
        <input name="phone.num" value="4576" /> 
    
        <button type="submit"> 提交</button> 
    
    </form> 
    

    扩展~什么是数据校验?

    这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验。

    数据校验分为客户端校验和服务端校验

    客户端校验:js校验

    @RequestMapping("/dataTest8")

    public void getParamsData8(User user){

    System.out.println(user.getUserName()+"---"+user.getUserPwd()+"-"+user.getPhone().getNum()); 
    

    }

    
    
    
    表单页面 
    
    ~~~ java
    <form action="dataTest8.do" method="post"> 
    
        <input name="userName" value="123456" /> 
    
        <input name="userPwd" value="4576" /> 
    
        <input name="phone.num" value="4576" /> 
    
        <button type="submit"> 提交</button> 
    
    </form> 
    

    扩展~什么是数据校验?

    这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验。

    数据校验分为客户端校验和服务端校验

    客户端校验:js校验

    服务端校验:springmvc使用validation校验,struts2使用validation校验。都有自己的一套校验规则。

  • 相关阅读:
    670. Maximum Swap
    653. Two Sum IV
    639. Decode Ways II
    636. Exclusive Time of Functions
    621. Task Scheduler
    572. Subtree of Another Tree
    554. Brick Wall
    543. Diameter of Binary Tree
    535. Encode and Decode TinyURL
    博客园自定义背景图片
  • 原文地址:https://www.cnblogs.com/lezijie/p/13602696.html
Copyright © 2011-2022 走看看