SpringMVC学习笔记——获取请求参数

@RequestParam(比较常用)

三个属性:
- value : 值即请求参数的参数名
- required :该参数是否必须,默认为true
- defaultValue : 请求参数的默认值
JAVA参考代码如下:

    /**
     * @RequestParam 来映射请求参数.
     * value 值即请求参数的参数名
     * required 该参数是否必须,默认为true
     * dafaultValue 请求参数的默认值
     */
    @RequestMapping(value = "testRequestParam")
    public String testRequestParam(@RequestParam(value = "username") String username,
            @RequestParam(value = "age") int age) {
        System.out.println("testRequestParam + username:" + username + " age : " + age);
        return SUCCESS;
    }

这种形式,使用传统的URL类型,例如springmvc/testRequestParam?username=shen&age=11
注意点:若配置了required=false,则一般要给予一个默认值,因为若为简单类型,如int,不赋予默认值,SpringMVC不会做拆箱操作,导致出错。(required=false,若参数类型为Integer,则参数为null,若参数类型为int,则网页请求报错,猜测:null导致拆箱失败)

@RequestHeader(不常用)

用法同@RequestParam,上代码:

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

@CookieValue

属性同@RequestParam,用法也同。

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

POJO

SpringMVC会按请求参数名POJO属性名进行自动匹配,自动为该对象填充属性值。支持级联(对象嵌套)属性,如:user.username、user.address.city等。
示例代码如下:

public class User {
    private String username;
    private String password;
    private String email;
    private int age;
    private Address address;

    public User() {
        super();
    }

    public User(String username, String password, String email, int age, Address address) {
        super();
        this.username = username;
        this.password = password;
        this.email = email;
        this.age = age;
        this.address = address;
    }

    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 [username=" + username + ", password=" + password + ", email=" + email + ", age=" + age
                + ", address=" + address + "]";
    }
}
public class Address {
    private String province;
    private String city;

    public Address() {
        super();
    }

    public Address(String province, String city) {
        super();
        this.province = province;
        this.city = 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 + "]";
    }

}
    /**
     * SpringMVC会按`请求参数名`和`POJO属性名`进行自动匹配,自动为该对象填充属性值。
     * 支持级联(对象嵌套)属性,如:user.username、user.address.city等。
     */
    @RequestMapping(value = "/testPojo")
    public String testPojo(User user) {
        System.out.println("testPojo : " + user);
        return SUCCESS;
    }

表单如下:

    <form action="springmvc/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>
        province:
        <input type="text" name="address.province" />
        <br>
        city:
        <input type="text" name="address.city" />
        <br>
        <input type="submit" value="submit" />
    </form>

其中,Controller中的方法参数为User,将会按照表单中的name自动进行赋值,支持嵌套(本例的Address)。

Servlet原生API

SpringMVC支持Servlet原生API作为方法参数,示例代码如下:

    /**
     * 可以使用Servlet原生的API作为目标方法的参数,具体支持以下类型
     * HttpServletRequest
     * HttpServletResponse
     * HttpSession
     * java.security.Principal
     * Locale
     * InputStream
     * OutputStream
     * Reader
     * Write
     */
    @RequestMapping(value = "/testServletAPI")
    public void testServletAPI(HttpServletRequest request, HttpServletResponse response, Writer out)
            throws IOException {
        System.out.println("testServletAPI, " + request + " , " + response);
        out.write("Hello SpringMVC");
        // return SUCCESS;
    }

猜你喜欢

转载自blog.csdn.net/u012525096/article/details/81304455