springMVC参数绑定

@RequestMapping("")注解的详细介绍

通过查询源代码:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {

	String name() default "";
	String[] value() default {};
}

2.3.1 @RequestMapping 应用在类上
表示窄化我们访问路径,利于模块化开发。
案例:

@Controller //交给spring管理:
@RequestMapping("/user")
public class HelloController {
	
	
	@RequestMapping(value="/sayHello")
	public ModelAndView sayHello() {
		System.out.println("hello ...");
		
		//准备一个对象; 
		ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:  
		mav.setViewName("/WEB-INF/success.jsp");
		
		return mav; 
		
	}

此时: 客户端浏览器发出请求的时候:
http://localhost:8080/springmvc-02/user/sayHello

2.3.2 @RequestMapping注解的属性详解

Name属性
@RequestMapping(name=”sayHello”)
Name属性是给当前的注解命名、 没有实质的作用。
http://localhost:8080/springmvc-02/user#sayHello
Value属性
@RequestMapping(value={“/sayHello”,”sayHelllo1”})
一个方法有多个映射路径:
@RequestMapping(value={“/sayHello”})
Value的属性值只有一个值的时候, {}可以省略 ,当只有一个value属性的时候, value可以省略的。
@RequestMapping(“/sayHello”)

Method属性:
@RequestMapping(value="/sayHello",method= {RequestMethod.POST,RequestMethod.GET})
Method属性指明了当前方法的请求方式。 可以是get,post,put。
Params属性(不常用)
@RequestMapping(value="/sayHello",params=“username”)
请求路径当中必须要携带key为username的参数。如果不携带, 请求不到该路径、404

@RequestMapping(value="/sayHello",params=“username=李四”)
请求路径当中必须要携带key为username的参数,切key对应的值必须是李四,此时能够请求到该路径。否则404

Headers属性
@RequestMapping(value="/sayHello"headers=“accept”)
Headers表明,请求头信息当中必须包含一个头是accept的头。 否则不行。

3 springmvc当中的参数绑定

3.1传统的方式获得方式
Get username=lisi&password=123
Post username=lisi&password=123
传统的方式获得参数:
Request.getParameter(“username”);
Request.getParameter(“password”);
3.2 springmvc可以通过参数的绑定获得参数
参数的绑定
username=lisi&password=123

Public ModelAndView getParameter(String username, String password ){
SYstem.out.println(username+”:”+password);
}

3.2.1 参数的绑定是简单数据类型(基本数据类型+String)
前端:

<a href="user/saveUser?username=wangwu&password=123" >测试参数</a><br/>

后端:
//方法的参数,绑定了基本数据类型: String ,int ,double ,float

@RequestMapping(value="/saveUser")
	public ModelAndView saveUser(String username,int password) {
		System.out.println("saveUser执行了"+username+":"+password);
		ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:  
		mav.setViewName("/WEB-INF/success.jsp");
		return mav;
	}

3.2.2 参数绑定的类型是pojo类型
前端:

<a href="user/updateUser?username=wangwu&password=123&age=21" >测试参数pojo类型</a><br/>

后端:

//方法的参数: 绑定的是一个pojo类型:  
	@RequestMapping(value="/updateUser")
	public ModelAndView updateUser(User user) {
		System.out.println("saveUser执行了"+user);
		ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:  
		mav.setViewName("/WEB-INF/success.jsp");
		return mav;
	} 

3.2.3 参数绑定的类型是pojo类型的包装类型。
前端:

<a href="user/updateUser?username=wangwu&password=123&age=21&address.province=sd&address.city=qingdao" >测试参数pojo类型的包装类</a><br/>

后端:
@

RequestMapping(value="/saveUser2")
	public ModelAndView saveUser2(User user) {//user对象当中封装了一个address对象: user pojo类型的包装类
		System.out.println("saveUser执行了"+user);
		ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:  
		mav.setViewName("/WEB-INF/success.jsp");
		return mav;
	}

3.2.4 参数的绑定List集合类型
List集合当中的参数的类型: 简单类型

javaBean: 
public class User implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String username; 
	private String password; 
	private Integer age;
	
	//private List<String> hobbies;
	private List<String> hobbies;

前端:

<form action="user/saveUser3">
		username: <input type="text" name="username"/><br/>
		password: <input type="text" name="password"/><br/>
		age: <input type="text" name="age"/><br/>
		hobby:<input type="text" name="hobbies[0]"/><br/>
		hobby:<input type="text" name="hobbies[1]"/><br/>
		<input type="submit" value="submit"/>
	</form>

后端:

//	方法的参数: 绑定的是一个集合类型: List
	@RequestMapping(value="/saveUser3")
	public ModelAndView saveUser3(User user) {//user对象当中封装了一个List<String>
		System.out.println("saveUser执行了"+user);
		//[username=yezhipeng,123321, password=null, age=25, hobbies=[chiji, laomei]]
		ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:  
		mav.setViewName("/WEB-INF/success.jsp");
		return mav;
	}

List集合当中的参数的类型:对象的类型

Pojo:
    public class User implements Serializable{
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	private String username; 
    	private String password; 
    	private Integer age;
    	

//	private List<String> hobbies; //List集合
	private List<Address> list; 

前端:

 <form action="user/saveUser3">
		username: <input type="text" name="username"/><br/>
		password: <input type="text" name="password"/><br/>
		age: <input type="text" name="age"/><br/>
		province1:<input type="text" name="list[0].province"/><br/>
		  city1 : <input type="text" name="list[0].city"/><br/>
		province2:<input type="text" name="list[1].province"/><br/>
		   city2 :<input type="text" name="list[1].city"/><br/>
		<input type="submit" value="submit"/>
	</form>

后端:

//	方法的参数: 绑定的是一个集合类型: List
	@RequestMapping(value="/saveUser3")
	public ModelAndView saveUser3(User user) {//user对象当中封装了一个List<String>
		System.out.println("saveUser执行了"+user);
		ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:  
		mav.setViewName("/WEB-INF/success.jsp");
		return mav;
	}
3.2.5 参数绑定Map集合类型

Pojo:

public class User implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String username; 
	private String password; 
	private Integer age;
	
//	private List<String> hobbies; //List集合
//	private List<Address> list; 
	
	Map<String,Address> map;

前端:

 <form action="user/saveUser4">
		username: <input type="text" name="username"/><br/>
		password: <input type="text" name="password"/><br/>
		age:       <input type="text" name="age"/><br/>
		province1:<input type="text" name="map['one'].province"/><br/>
		  city1 : <input type="text" name="map['one'].city"/><br/>
		province2:<input type="text" name="map['two'].province"/><br/>
		   city2 :<input type="text" name="map['two'].city"/><br/>
		<input type="submit" value="submit"/>
	</form>

后端:

//方法的参数: 绑定的是一个集合类型map
	@RequestMapping(value="/saveUser4")
	public ModelAndView saveUser4(User user) {
		System.out.println("saveUser执行了"+user);
		ModelAndView mav =new ModelAndView(); //封装数据跳转的路径:  
		mav.setViewName("/WEB-INF/success.jsp");
		return mav;
	}

4乱码问题

Tomcat7.0 以及以下版本: 出现乱码问题; 默认的字符集是iso-8859-1 出现乱码。
Tomcat8 以及8版本以上:不会出现乱码问题: 默认的字符集是utf-8 ,不会乱码。
Springmvc当中, 提供了一个过滤器,解决乱码问题:

把这个粘在 springmvc.xml就可以了

 <!-- 配置过滤器,解决中文乱码问题:  -->
  <filter>
      <filter-name>CharacterEncodingFilter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <!-- 配置一个初始化参数: -->
      <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
      </init-param>
  </filter>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方-教育技术博主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值