Spring MVC的进阶使用-1

(1)SpringMVC的请求处理

##### 1、SpringMVC对请求参数的处理

​ 在之前的servlet中我们可以通过request.getParameter()来获取请求中的参数-但是在我们编写的SpringMVC的应用程序中-在具体请求的方法中并不包含request参数-那么我们应该如何获取请求中的参数呢?

​ 需要使用以下几个注解:

​ @RequestParam:获取请求的参数

​ @RequestHeader:获取请求头信息

​ @CookieValue:获取cookie中的值

@RequestParam的基本使用

``java package com.oi.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;@Controllerpublic class RequestController { /** * 如何获取SpringMVC中请求中的信息 * 默认情况下-可以直接在方法的参数中填写跟请求一样的名称-此时会默认接受参数 * 如果有值-直接赋值-如果没有-那么直接给空值 * * @RequestParam:获取请求中的参数值,使用此注解之后-参数的名称不需要跟请求的名称一致-但是必须要写 * public String request(@RequestParam("user") String username){ * * 此注解还包含三个参数: * value:表示要获取的参数值 * required:表示此参数是否必须-默认是true-如果不写参数那么会报错-如果值为false-那么不写参数不会有任何错误 * defaultValue:如果在使用的时候没有传递参数-那么定义默认值即可 * * * @param username * @return */ @RequestMapping("/request") public String request(@RequestParam(value = "user",required = false,defaultValue = "hehe") String username){ System.out.println(username); return "success"; }} `

@RequestHeader的基本使用:

`java package com.oi.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestHeader;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import sun.management.resources.agent;@Controllerpublic class RequestController { /** * 如果需要获取请求头信息该如何处理呢? * 可以使用@RequestHeader注解- * public String header(@RequestHeader("User-Agent") String agent){ * 相当于 request.getHeader("User-Agent") * * 如果要获取请求头中没有的信息-那么此时会报错-同样-此注解中也包含三个参数,跟@RequestParam一样 * value * required * defalutValue * @param agent * @return */ @RequestMapping("/header") public String header(@RequestHeader("User-Agent") String agent){ System.out.println(agent); return "success"; }} `

@CookieValue的基本使用

`java package com.oi.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.CookieValue;import org.springframework.web.bind.annotation.RequestHeader;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import sun.management.resources.agent;@Controllerpublic class RequestController { /** * 如果需要获取cookie信息该如何处理呢? * 可以使用@CookieValue注解- * public String cookie(@CookieValue("JSESSIONID") String id){ * 相当于 * Cookie[] cookies = request.getCookies(); * for(Cookie cookie : cookies){ * cookie.getValue(); * } * 如果要获取cookie中没有的信息-那么此时会报错-同样-此注解中也包含三个参数,跟@RequestParam一样 * value * required * defalutValue * @param id * @return */ @RequestMapping("/cookie") public String cookie(@CookieValue("JSESSIONID") String id){ System.out.println(id); return "success"; }} `

​ 如果请求中传递的是某一个对象的各个属性值-此时如何在控制器的方法中获取对象的各个属性值呢?

​ 在SpringMVC的控制中-能直接完成对象的属性赋值操作-不需要人为干预。

User.java

`java package com.oi.bean;import java.util.Date;public class User { private Integer id; private String name; private Integer age; private Date date; private Address address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + ''' + ", age=" + age + ", date=" + date + ", address=" + address + '}'; }} `

Address.java

`java package com.oi.bean;public class Address { private String province; private String city; private String town; public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = ci