获取参数是web开放中必不可少的,在SpringBoot中获取参数有多种方式,下面一一讲解各个方法是如何获取参数的。

HttpServletRequest原生方法

获取HttpServletRequest对象也是Servlet开发中获取参数的方法。

@Controller
public class HelloController {

    @ResponseBody
    @GetMapping("/testParam")
    public String getUrlValue(HttpServletRequest request) {
        //获取单个参数
        String name = request.getParameter("name");
        //获取全部参数
        Map<String, String[]> parameterMap = request.getParameterMap();
        String[] gender = parameterMap.get("gender");
        System.out.println(name);
        return name;
    }

}

直接把需要接受的参数放在方法的形参中

该方法适用于参数较少的情况,参数多的时候需要将参数封装为Java类。

@Controller
public class HelloController {

    @ResponseBody
    @GetMapping("/testParam")
    public String getUrlValue(String name, String gender) {
        System.out.println("name is:"+name);
        System.out.println("gender is:"+gender);
        return name;
    }

}
该方法可以接受get和post参数,上面的例子中接收的参数是name和gender,如果参数较多需要封装为Java对象,看下面的例子。

封装为JavaBean接收

这也是我们开发中在多参数提交的时候经常使用的方法,对于再多的参数只需要在Java类中添加相关属性即可。

HelloController.java

@Controller
public class HelloController {

    @ResponseBody
    @GetMapping("/testParam")
    public String getUrlValue(User user) {
        System.out.println("name is:"+user.getName());
        System.out.println("gender is:"+user.getGender());
        return user.getName();
    }

}

User.class

package com.example.yxjc.domain;
import java.io.Serializable;

public class User implements Serializable {

    private static final long serialVersionUID = 2733191978271622951L;
    private String name;
    private String gender;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}

使用@PathVariable注解接收参数

这是一种固化url地址接收参数的方式,同样应对于参数较少的情况。

@Controller
public class HelloController {

    @ResponseBody
    @GetMapping("/testParam/{name}/{gender}")
    public String getUrlValue(@PathVariable String name, @PathVariable String gender) {
        System.out.println("name is:"+name);
        System.out.println("gender is:"+gender);
        return name;
    }

}

上面的例子中url只能是/testParam/param1/param2,那么我们的param1对应于name,param2对应于gender。

使用@RequestParam注解接收参数

使用该方式需要参数存在,不存在则会报错。

@Controller
public class HelloController {

    @ResponseBody
    @GetMapping("/testParam")
    public String getUrlValue(@RequestParam("name") String name, @RequestParam("gender") String gender) {
        System.out.println("name is:"+name);
        System.out.println("gender is:"+gender);
        return name;
    }

}
上面的例子中,参数name和gender必须同时存在,这也是简单校验是否为空的一种方式,可以设置参数不存在 方法:@RequestParam(value="name", required=false)

使用@RequestBody注解接收参数

该方法只适用于post提交的参数,还需要设置Content-Type为application/json。

@Controller
public class HelloController {

    @ResponseBody
    @PostMapping("/testParam")
    public String getUrlValue(@RequestBody User user) {
        System.out.println("name is:"+user.getName());
        System.out.println("gender is:"+user.getGender());
        return user.getName();
    }

}

总结

对于少量参数直接写在方法上即可,如果参数较多的情况下则封装成java类,如果需要控制url的格式可以使用使用@PathVariable注解。

下面讲解web开发中常用的方法,SpringBoot参数的校验。