SpringMVC 学习(三)——映射请求参数 & 请求参数

理方法

Spring MVC 分析理方法的名,将 HTTP 求信 息定到理方法的相人参

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

必要可以方法及方法入参注相的注解

@PathVariable

@RequestParam@RequestHeader )、Spring

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

 

 

使用 @RequestParam 求参数

理方法入参使用 @RequestParam 可以把求参 数传递给请求方法

value参数名

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

 

使用 @RequestHeader 报头的属性

包含了若干个属性,服器可据此知客端的信 息, @RequestHeader 即可将中的属性值绑 定到理方法的入参中

 

 

使用 @CookieValue 求中的 Cookie

@CookieValue 让处理方法入参定某个 Cookie

 

 

使用 POJO 求参数

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

dept.deptIddept.address.tel

 

 

使用 Servlet API 入参

 

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

HttpServletRequest

HttpServletResponse

HttpSession

java.security.Principal

Locale

InputStream

OutputStream

Reader

Writer

代码示例:

address.java

package com.xuehj.springmvc.entity;

/**
 * @program: SpringMVC-1
 * @description: TODO
 * @author: Mr.Xue
 * @create: 2018-12-24 19:13
 **/
public class Address {
    private String province;
    private String city;

    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 = city;
    }

    @Override
    public String toString() {
        return "Address [province=" + province + ", city=" + city + "]";
    }
}

user.java

package com.xuehj.springmvc.entity;

/**
 * @program: SpringMVC-1
 * @description: TODO
 * @author: Mr.Xue
 * @create: 2018-12-24 19:13
 **/
public class User {
    private Integer id;

    private String username;
    private String password;

    private String email;
    private int age;

    private Address address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

test.java

package com.xuehj.springmvc.handler;

import com.xuehj.springmvc.entity.User;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer;

/**
 * @program: SpringMVC
 * @description: TODO
 * @author: Mr.Xue
 * @create: 2018-12-24 09:36
 **/
@Controller
@RequestMapping("/view")
public class HelloWorld {

    /**
     * @RequestParam 来映射请求参数.
     * value 值即请求参数的参数名
     * required 该参数是否必须. 默认为 true
     * defaultValue 请求参数的默认值
     * int age 改成 Integer 比较好,有 null 值
     */
    @RequestMapping(value = "/testRequestParam")
    public String testRequestParam(
            @RequestParam(value = "username") String un,
            @RequestParam(value = "age", required = false, defaultValue = "0") int age) {
        System.out.println("testRequestParam, username: " + un + ", age: "
                + age);
        return "success.jsp";
    }

    /**
     * 了解:
     * 映射请求头信息 用法同 @RequestParam
     */
    @RequestMapping("/testRequestHeader")
    public String testRequestHeader(
            @RequestHeader(value = "Accept-Language") String al) {
        System.out.println("testRequestHeader, Accept-Language: " + al);
        return "success.jsp";
    }

    /**
     * 了解:
     *
     * @CookieValue: 映射一个 Cookie 值. 属性同 @RequestParam
     */
    @RequestMapping("/testCookieValue")
    public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
        System.out.println("testCookieValue: sessionId: " + sessionId);
        return "success.jsp";
    }

    /**
     * Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,
     * 自动为该对象填充属性值。支持级联属性。
     * 如:dept.deptId、dept.address.tel 等
     */
    @RequestMapping("/testPojo")
    public String testPojo(User user) {
        System.out.println("testPojo: " + user);
        return "success.jsp";
    }

    /**
     * 可以使用 Serlvet 原生的 API 作为目标方法的参数 具体支持以下类型
     * <p>
     * HttpServletRequest
     * HttpServletResponse
     * HttpSession
     * java.security.Principal
     * Locale InputStream
     * OutputStream
     * Reader
     * Writer
     *
     * @throws IOException
     */
    @RequestMapping("/testServletAPI")
    public void testServletAPI(HttpServletRequest request,
                               HttpServletResponse response, Writer out) throws IOException {
        System.out.println("testServletAPI, " + request + ", " + response);
        out.write("hello springmvc");
        //return "success.jsp";
    }
}

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: 薛恒杰
  Date: 2018/12/24
  Time: 9:21
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>$Title$</title>
    </head>
    <body>
        <a href="view/testRequestParam?username=Xue&age=20">Test RequestParam</a>
        <br><br>

        <a href="view/testRequestHeader">Test RequestHeader</a>
        <br><br>

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

        <form action="view/testPojo" method="post">
            username: <input type="text" name="username"/>
            <br>
            password: <input type="password" name="password"/>
            <br>
            email: <input type="text" name="email"/>
            <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>
        <br><br>

        <a href="view/testServletAPI">Test ServletAPI</a>
        <br><br>
    </body>
</html>

猜你喜欢

转载自blog.csdn.net/weixin_41577923/article/details/85237670