1. 程式人生 > >SpringMVC 學習(三)——對映請求引數 & 請求引數

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>