SpringMVC

@RequestParam获取请求参数

一:默认方式获取请求参数

  1. 发送请求参数
<a href="test?name=liushui">test</a>
  1. Controller中的处理方法:
   @RequestMapping("test")
   public String test(String name) {
   	  System.out.println(name);
   	  return "success";
   }

必须使处理函数中的变量名与想要获取的参数的变量名相同

这种方式下,参数可以省略,默认值为null

二:通过@RequestParam(“parameter”)

  1. 发送请求参数
<a href="test?name=liushui">test</a>
  1. Controller中的处理方法:
    @RequestParam(“param”)中的param必须指定为想要获取的参数
    需要跟一个变量,这个变量的名字为任意,不需要和获取的参数为相同名
   @RequestMapping("test")
   public String test(@RequestParam("name")String NAME) {
   	System.out.println(NAME);
   	return "success";
   }
  

这种方式下参数不可以省略的,否则会400
404 parameter is not present
但是修改@RequestParam()中的值可以做到

@RequestParam()中有三个参数

  • value
  • required
  • defaultvalue

value=“name” 表示要获取name这个参数
required为boolea,true(默认)表示这个数必须要有,false反之
defaultvalue=“liushui” 表示当没有提交这个参数时,用这个默认值代替

@RequestHeader()来获取请求头参数

通过@RequestHeader()来获取
与@RequestParam一样@RequestHeader中有三个参数
具体使用见@RequestParam获取请求参数

  • value
  • required
  • defaultValue

@CookieValue获取Cookie

@RequestMapping("test")
	public String test(@RequestParam(value = "name",required = false,defaultValue = "nihao")String name,
		@CookieValue("JSESSIONID")String jid) {
		System.out.println(name);
		return "success";
	}

form 表单中需要提交参数过多,使用POJO接收参数

现在form表单有多个项要进行提交,提交的参数必定要接收,若在处理函数中定义多个变量来接收form表单提交的参数显得过于累赘,可以使用一个POJO来接收

form表单:

   <form action="test" method="get">
		name:<input type="text" name="name1" ><br>
		price:<input type="text" name="price"><br>
		author:<input type="text" name="author" ><br>
		<input type="submit" value="提交">
	</form>

POJO:

public class Book {
	private String name;
	private String author;
	private int price;
	
	public Book() {
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Book [name=" + name + ", author=" + author + ", price=" + price + "]";
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	
}

处理函数:

	@RequestMapping("test")
	public String test(Book book) {
		System.out.println(book);
		return "success";
	}
  • 这个POJO中的属性必须与form表单中提交的参数名一样,否则会找不到
  • 若有多个值提交,最少有一个值不为空,否则会报错
  • 上面说法有误,我测试了下,如果为String类型参数被省略会默认补上null,而int类型省略,就会直接报错!!!所以说基本类型不可以省略!!!

报错

级联封装

当form表单中存在多余属性,但是该属性是属性的属性,听起来可能很拗口,我打个比方,类A中有属性类B对象,form表单中的对象为类B中的对象

现在POJO中多一个类对象:

	private String name;
	private String author;
	private int price;
	private Press press;

(press为新增对象)

Press类:

public class Press {
	private String principalName;
	private String phoneNumber;
	public  Press() {}
	public String getPrincipalName() {
		return principalName;
	}
	public void setPrincipalName(String principalName) {
		this.principalName = principalName;
	}
	public String getPhoneNumber() {
		return phoneNumber;
	}
	public void setPhoneNumber(String phoneNumber) {
		this.phoneNumber = phoneNumber;
	}
	@Override
	public String toString() {
		return "Press [principalName=" + principalName + ", phoneNumber=" + phoneNumber + "]";
	}
	
}

现在POJO中出现了一个对象类型属性(不同于String等)由于form表单中name值要和属性名相同,name属性中的属性在form中该怎么写name呢?

<form action="test" method="get">
		name:<input type="text" name="name1" ><br>
		price:<input type="text" name="price"><br>
		author:<input type="text" name="author" ><br>
		principalName:<input type="text" name="press.principalName" ><br>
		phoneNumber:<input type="text" name="press.phoneNumber" ><br>
		<input type="submit" value="提交">
	</form>

== 必须要用 对象名.属性名 ,只有这样才会让SpringMVC找到对应的类进行参数注入==

解决中文乱码问题

  • 请求乱码

    • GET请求

    在服务器配置中找到 server.xml 在该位置上 添加 URIEncoding=“UTF-8”

       <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443"/>
    
    • POST请求
  • 响应乱码

post请求乱码和响应乱码可以在 web,xml中进行配置过滤器进行解决

<filter>
		
   	<filter-name>CharacterEncodingFilter</filter-name>
   	<filter-class>org.springframework.web.filter.CharacterEncodingFilter </filter-class>
   	<!-- 这这参数是用来配置post请求参数的编码-->
   	<init-param>
   		<param-name>encoding</param-name>
   		<param-value>UTF-8</param-value>
   	</init-param>
   	<!-- 这个boolean类型的参数是用来设置是否也要对响应乱码进行处理-->
   	<init-param>
   		<param-name>forceEncoding</param-name>
   		<param-value>true</param-value>
   	</init-param>
   </filter>
   <filter-mapping>
   	<filter-name>CharacterEncodingFilter</filter-name>
   	<url-pattern>/*</url-pattern>
   </filter-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值