SpringMVC(三)--映射请求参数和请求头

1.请求处理方法签名

Spring MVC 通过分析处理方法的签名,将 HTTP 请求信息绑定到处理方法的相应参数中

• Spring MVC 控制器理方法名的限制是很松的,几乎可以按喜欢的任何方式对方法进行签名。

必要可以对方法及方法参数标注相应的注解(@PathVariable、@RequestParam、@RequestHeader 等)、Spring

MVC 框架会将 HTTP 求的信息定到相的方法参数中,并根据方法的返回值类型做出相应的后续处理。

2.使用 @RequestParam 绑定请求参数值

• 在处理方法的参数处使用 @RequestParam 可以把求参传递给请求方法(表单数据)

        – value:参数名,注意:一般方法的参数设置为 包装类或类 类型的,不然当required=false时,若是用基本类型则在网页会抛出500,除非设置参数的默认值

        – required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常

        – defaultValue:设置参数默认值,如果想要用基本类型的,最好设置一下默认值

• 例子:

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;


@Controller

public class Parameter {


    @RequestMapping("/testParameter")

    public String testParameter(@RequestParam("username") String username,

                                @RequestParam("age") Integer age){

        System.out.println("testParameter -> username = " + username + ", age = " + age);

        return "success";

    }

}

jsp文件:

<a href="/testParameter?username=zhou&age=10">Test Parameter</a>

额外当遇到value值设置为基本类型的值,并且设置required=false的话并没有设置参数默认值,则当缺少该参数时访问页面则会报错:HTTP Status 500 - Request processing failed

3. 使用 @RequestHeader 绑定请求报头的属性值(了解)

• 请求头包含了若干个属性,服务器可据此获知客户端的信息, @RequestHeader 即可将中的属性值绑定到理方法的参数中

• 例子:

@RequestMapping("/testHeaders")

public String testHeaders(@RequestHeader("User-Agent") String agent){

    System.out.println("Header:");

    System.out.println("User-Agent:" + agent);

    return "success";

}

jsp文件:

<a href="/testHeaders">Test Headers</a>

4.使用 @CookieValue 绑定请求中的 Cookie 值(了解)

• @CookieValue 可让处理方法的参数绑定某个 Cookie 值

• 例子:

@RequestMapping("/testCookieValue")

public String testCookieVaule(@CookieValue("JSESSIONID") String js){

    System.out.println("JSESSIONID = " + js);

    return "success";

}

jsp文件:

<a href="/testCookieValue">Test CookieValue</a>

5. 使用 POJO 对象绑定请求参数值(重要

•  比如提交表单时,如果对于每一个表单值都用一个@RequestParam去映射的话很麻烦,所以就出现了使用对象来映射表单的数据

• Spring MVC 会按求参数名和 POJO 属性名行自配,自动为该对象填充属性支持级联属性

    如:dept.deptId、dept.address.tel 等

• 例子:

@RequestMapping("/testPOJO")

public String testPOJO(User user){ // 会直接匹配,不需要使用@RequestParam

    System.out.println(user);

    return "success";

}

jsp文件:

<form action="/testPOJO" method="post">

  username: <input type="text" name="username">

  <br/>

  password: <input type="password" name="password">

  <br/>

  age: <input type="text" name="age">

  <br/>

  city: <input type="text" name="Address.city">

  <br/>

  province: <input type="text" name="Address.province">

  <br/>

  <input type="submit" value="submit">

</form>

然后需要根据表单创建类:

public class User {

    private String username;

    private String password;

    private Integer age;

    private Address address;

    Get and Set Method

    toString()

}

public class Address {

    private String city;

    private String province;

    Get and Set Method

    toString()

}

6. 使用 Servlet 原生的 API 作为方法的参数(用到

MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数

    • HttpServletRequest

    • HttpServletResponse

    • HttpSession

    • java.security.Principal

    • Locale

    • InputStream

    • OutputStream

    • Reader

    • Writer

发布了55 篇原创文章 · 获赞 15 · 访问量 5284

猜你喜欢

转载自blog.csdn.net/weixin_41800884/article/details/99947204