003 Sping Boot 获取 http 请求参数

上一遍《Spring Boot 返回 JSON》 中我们学习了如何从 Spring Boot 返回 json 数据,这篇我们继续讨论,Spring Boot 如何获取 HTTP 传递的参数。

从 HTTP 协议中,我们可知,传递参数的方式有这么几种:

  1. 在 uri 中通过拼接查询字符串传递,这是我们常用的 HTTP GET 方式;
  2. 在 HTTP 中的 body 中传递,由于 body 中传递数据的大小不限,所以这种方式可以传递多种格式的数据,如:multipart/form-data、application/x-www-form-urlencode、application/json、application/xml、text/plain、text/html 等;这类方式为 HTTP POST 方式。

下面我们讨论几种常用的方式:

方式一:在 controller 类的 action 方法中,把所需要的参数作为 action 方法的参数(get/post)

    @RequestMapping("/user/login")
    public String login(String name, String pwd) {
        String res = "you input: name:" + name + "; pwd:" + pwd;
        return res;
    }

这种方式同时支持这种方式同时支持 getpost(仅支持 multipart/form-data、application/x-www-form-urlencode )

方式二:在 controller 类的 action 方法中, 通过 HttpServletRequest 作为 action 方法的参数(get/post)

    @RequestMapping("/user/login2")
    public String login2(HttpServletRequest request) {
        String name = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        return "you input: name:" + name + "; pwd:" + pwd;
    }


这种方式同时支持这种方式同时支持 getpost(仅支持 multipart/form-data、application/x-www-form-urlencode )

方式三:在 controller 类的 action 方法中, 通过 bean 作为 action 方法的参数(get/post)

    @RequestMapping("/user/login3")
    public String login3(User user) {
        return user.toString();
    }

User.java 内容:

package com.jdz.beans;

public class User {
    private Integer uid;
    private String name;
    private String pwd;

    @Override
    public String toString() {
        return String.format("uid: %d name: %s pwd:%s", this.uid, this.name, this.pwd);
    }
}


这种方式同时支持这种方式同时支持 getpost(仅支持 multipart/form-data、application/x-www-form-urlencode )

方式四:通过 @PathVariable 获取 uri 路径中的参数(get)

    @RequestMapping(value = "/user/login4/{name}/{pwd}", method = RequestMethod.GET)
    public String login4(@PathVariable String name, @PathVariable String pwd) {
        return "you input: name:" + name + "; pwd:" + pwd;
    }

请求方式:

http://localhost:8080/user/login4/name-lg4/pwd-lg4


这种方式只适合 get 方法

方式五:通过 @RequestParam 注解(get/post)

    @RequestMapping("/user/login5")
    public String login5(@RequestParam(value = "name", required = true) String name, @RequestParam("pwd") String pwd) {
        return "you input: name:" + name + "; pwd:" + pwd;
    }

这种方式同时支持这种方式同时支持 getpost(仅支持 multipart/form-data、application/x-www-form-urlencode )

方式六:通过 @RequestParam 注解,并用 Map 来接收参数(get/post)

    @RequestMapping("/user/login6")
    public String login6(@RequestParam Map<String, Object> params) {
        return "you input: name:" + params.get("name") + "; pwd:" + params.get("pwd");
    }

这种方式同时支持这种方式同时支持 getpost(仅支持 multipart/form-data、application/x-www-form-urlencode )

方式七:通过 @RequestBody 注解,并用 Map 来接收参数(json)

    @RequestMapping("/user/login7")
    public String login7(@RequestBody Map<String, Object> params) {
        return "you input: name:" + params.get("name") + "; pwd:" + params.get("pwd");
    }

这种方式适合 application/json ,用于获取 json 格式

其他

在此基础上还有其他的方式,上面主要列举了一些常用的用法,每种用法可以根据实际场景进行选择使用。

源码:https://github.com/xiongxianhe/springboot.git

发表评论