获取请求参数

4.3 获取请求参数

4.3.1 获取路径参数

​ RestFul风格的接口一些参数是在请求路径上的。类似: /user/1 这里的1就是id。

​ 如果我们想获取这种格式的数据可以使用**@PathVariable**来实现。

范例一

​ 要求定义个RestFul风格的接口,该接口可以用来根据id查询用户。请求路径要求为 /user ,请求方式要求为GET。

​ 而请求参数id要写在请求路径上,例如 /user/1 这里的1就是id。

​ 我们可以定义如下方法,通过如下方式来获取路径参数:

@RestController
public class UserController {

    @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
    public String findUserById( @PathVariable("id")Integer id){
        System.out.println("findUserById");
        System.out.println(id);
        return "findUserById";
    }
}
范例二

​ 如果这个接口,想根据id和username查询用户。请求路径要求为 /user ,请求方式要求为GET。

​ 而请求参数id和name要写在请求路径上,例如 /user/1/zs 这里的1就是id,zs是name

​ 我们可以定义如下方法,通过如下方式来获取路径参数:

@RestController
public class UserController {
    @RequestMapping(value = "/user/{id}/{name}",method = RequestMethod.GET)
    public String findUser(@PathVariable("id") Integer id,@PathVariable("name") String name){
        System.out.println("findUser");
        System.out.println(id);
        System.out.println(name);
        return "findUser";
    }
}

4.3.2 获取请求体中的Json格式参数

​ RestFul风格的接口一些比较复杂的参数会转换成Json通过请求体传递过来。这种时候我们可以使用**@RequestBody**注解获取请求体中的数据。

4.3.2.1 配置

​ SpringBoot的web启动器已经默认导入了jackson的依赖,不需要再额外导入依赖了。

4.3.2.2 使用
范例一

​ 要求定义个RestFul风格的接口,该接口可以用来新建用户。请求路径要求为 /user ,请求方式要求为POST。

用户数据会转换成json通过请求体传递。
​ 请求体数据

{"name":"三更","age":15}

1.获取参数封装成实体对象

​ 如果我们想把Json数据获取出来封装User对象,我们可以这样定义方法:

@RestController
public class UserController {
    @RequestMapping(value = "/user",method = RequestMethod.POST)
    public String insertUser(@RequestBody User user){
        System.out.println("insertUser");
        System.out.println(user);
        return "insertUser";
    }
}

​ User实体类如下:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String name;
    private Integer age;
}

2.获取参数封装成Map集合

​ 也可以把该数据获取出来封装成Map集合:

    @RequestMapping(value = "/user",method = RequestMethod.POST)
    public String insertUser(@RequestBody Map map){
        System.out.println("insertUser");
        System.out.println(map);
        return "insertUser";
    }
范例二

​ 如果请求体传递过来的数据是一个User集合转换成的json,Json数据可以这样定义:

[{"name":"三更1","age":14},{"name":"三更2","age":15},{"name":"三更3","age":16}]

​ 方法定义:

    @RequestMapping(value = "/users",method = RequestMethod.POST)
    public String insertUsers(@RequestBody List<User> users){
        System.out.println("insertUsers");
        System.out.println(users);
        return "insertUser";
    }
4.3.2.3 注意事项

​ 如果需要使用**@RequestBody**来获取请求体中Json并且进行转换,要求请求头 Content-Type 的值要为: application/json 。

4.3.3 获取QueryString格式参数

​ 如果接口的参数是使用QueryString的格式的话,我们也可以使用SpringMVC快速获取参数。

​ 我们可以使用**@RequestParam**来获取QueryString格式的参数。

4.3.3.1 使用
范例一

​ 要求定义个接口,该接口请求路径要求为 /testRequestParam,请求方式无要求。参数为id和name和likes。使用QueryString的格式传递。

1.参数单独的获取

​ 如果我们想把id,name,likes单独获取出来可以使用如下写法:

​ 在方法中定义方法参数,方法参数名要和请求参数名一致,这种情况下我们可以省略**@RequestParam**注解。

    @RequestMapping("/testRquestParam")
    public String testRquestParam(Integer id, String name, String[] likes){
        System.out.println("testRquestParam");
        System.out.println(id);
        System.out.println(name);
        System.out.println(Arrays.toString(likes));
        return "testRquestParam";
    }

​ 如果方法参数名和请求参数名不一致,我们可以加上**@RequestParam**注解例如:

    @RequestMapping("/testRquestParam")
    public String testRquestParam(@RequestParam("id") Integer uid,@RequestParam("name") String name, @RequestParam("likes")String[] likes){
        System.out.println("testRquestParam");
        System.out.println(uid);
        System.out.println(name);
        System.out.println(Arrays.toString(likes));
        return "testRquestParam";
    }

2.获取参数封装成实体对象

​ 如果我们想把这些参数封装到一个User对象中可以使用如下写法:

    @RequestMapping("/testRquestParam")
    public String testRquestParam(User user){
        System.out.println("testRquestParam");
        System.out.println(user);
        return "testRquestParam";
    }

​ User类定义如下:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String[] likes;
}

​ 测试时请求url如下:

http://localhost:8080/testRquestParam?id=1&name=三更草堂&likes=编程&likes=录课&likes=烫头

注意:实体类中的成员变量要和请求参数名对应上。并且要提供对应的set/get方法。

4.3.4 相关注解其他属性
4.3.4.1 required

​ 代表是否必须,默认值为true也就是必须要有对应的参数。如果没有就会报错。

​ 如果对应的参数可传可不传则可以把其设置为fasle

例如:

    @RequestMapping("/testRquestParam")
    public String testRquestParam(@RequestParam(value = "id",required = false) Integer uid,@RequestParam("name") String name, @RequestParam("likes")String[] likes){
        System.out.println("testRquestParam");
        System.out.println(uid);
        System.out.println(name);
        System.out.println(Arrays.toString(likes));
        return "testRquestParam";
    }
4.3.4.2 defaultValue

​ 如果对应的参数没有,我们可以用defaultValue属性设置默认值。

例如:

    @RequestMapping("/testRquestParam")
    public String testRquestParam(@RequestParam(value = "id",required = false,defaultValue = "777") Integer uid,@RequestParam("name") String name, @RequestParam("likes")String[] likes){
        System.out.println("testRquestParam");
        System.out.println(uid);
        System.out.println(name);
        System.out.println(Arrays.toString(likes));
        return "testRquestParam";
    }

4.4 响应体响应数据

​ 无论是RestFul风格还是我们之前web阶段接触过的异步请求,都需要把数据转换成Json放入响应体中。

4.4.1 数据放到响应体

​ 我们的SpringMVC为我们提供了**@ResponseBody**来非常方便的把Json放到响应体中。

@ResponseBody可以加在哪些东西上面?类上和方法上

​ 具体代码请参考范例。

4.4.2 数据转换成Json
4.4.2.1 配置

​ SpringBoot项目中使用了web的start后,不需要进行额外的依赖和配置

4.4.2.2 使用

​ 只要把要转换的数据直接作为方法的返回值返回即可。SpringMVC会帮我们把返回值转换成json。具体代码请参考范例。

4.4.3 范例
范例一

​ 要求定义个RestFul风格的接口,该接口可以用来根据id查询用户。请求路径要求为 /response/user ,请求方式要求为GET。

​ 而请求参数id要写在请求路径上,例如 /response/user/1 这里的1就是id。

​ 要求获取参数id,去查询对应id的用户信息(模拟查询即可,可以选择直接new一个User对象),并且转换成json响应到响应体中。

@Controller
@RequestMapping("/response")
public class ResponseController {

    @RequestMapping("/user/{id}")
    @ResponseBody
    public User findById(@PathVariable("id") Integer id){
        User user = new User(id, "执念", 15, null);
        return user;
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HttpServletRequest是Java Servlet API中的一个接口,用于获取HTTP请求的信息。可以通过HttpServletRequest对象获取请求参数获取请求参数的方法: 1. getParameter(String name):获取单个请求参数的值。 2. getParameterValues(String name):获取多个请求参数的值,返回一个字符串数组。 3. getParameterMap():获取所有请求参数的键值对,返回一个Map对象。 4. getQueryString():获取请求参数的原始字符串。 例如,以下代码可以获取名为“username”的请求参数的值: String username = request.getParameter("username"); 如果有多个名为“hobby”的请求参数,可以使用以下代码获取它们的值: String[] hobbies = request.getParameterValues("hobby"); 如果要获取所有请求参数的键值对,可以使用以下代码: Map<String, String[]> paramMap = request.getParameterMap(); 如果要获取请求参数的原始字符串,可以使用以下代码: String queryString = request.getQueryString(); ### 回答2: HTTP协议中,客户端(浏览器)发送请求时,会携带请求参数,用于向服务端(Web应用)传递数据。而在Java Web开发中,我们可以使用HttpServletRequest对象获取请求参数。 HttpServletRequest接口是Java Servlet规范中的一个接口,它代表了客户端发送的HTTP请求。该接口中提供了获取请求参数的方法,主要有以下几种方式: 1.通过getParameter方法获取请求参数。该方法的参数是一个String类型的key,用于指定需要获取参数名,该方法返回一个String类型的值,代表该参数名所对应的值。 例如,在如下的HTTP请求中,如果需要获取参数名为“username”的值,可通过如下方式进行: GET /test.jsp?username=zhangsan HTTP/1.1 Host: localhost:8080 //Java代码 String username = request.getParameter("username"); 2.通过getParameterValues方法获取请求参数。该方法用于获取一个参数名对应的多个值,返回值类型是一个String类型的数组。 例如,在如下的HTTP请求中,如果需要获取参数名为“hobby”的多个值,可通过如下方式进行: GET /test.jsp?hobby=sports&hobby=music HTTP/1.1 Host: localhost:8080 //Java代码 String[] hobbies = request.getParameterValues("hobby"); 3.通过getParameterMap方法获取所有请求参数。该方法返回一个Map对象,其中key为参数名,value为该参数名对应的值(数组类型)。 例如,在如下的HTTP请求中,如果需要获取所有参数,可通过如下方式进行: GET /test.jsp?username=zhangsan&age=20&hobby=sports&hobby=music HTTP/1.1 Host: localhost:8080 //Java代码 Map<String, String[]> parameterMap = request.getParameterMap(); 需要注意的是,在获取请求参数时,需要注意编码问题。因为HTTP请求中的参数值都是以URL编码(URL Encode)后的形式传递的,所以需要通过request.setCharacterEncoding方法进行解码,以避免出现中文乱码等问题。例如: //设置请求参数编码格式,一般为"UTF-8"或"GBK" request.setCharacterEncoding("UTF-8"); 综上所述,获取请求参数是Java Web开发中非常常见的一个需求,我们可以通过HttpServletRequest接口提供的一系列方法来实现。在实际开发中,需根据具体情况选择合适的方法进行使用。 ### 回答3: 在Web开发中,HttpServletRequest是一个很重要的接口,它是代表客户端发出的HTTP请求的接口,其中我们可以通过HttpServletRequest获取请求参数。 我们一般在Java Servlet开发中使用HttpServletRequest对象得到HTTP请求的方法参数,其中包括GET、POST方式的请求数据。HttpServletRequest对象内部有一个Map对象,它是由请求参数(request parameter)所组成,我们可以通过调用request.getParameter(name)方法得到请求参数的值。 获取请求参数的第一步,我们需要先获取HttpServletRequest对象。在Java Servlet中,我们可以使用request对象来获取HttpServletRequest对象,代码如下: HttpServletRequest request = (HttpServletRequest) req; 获取请求参数的第二步,我们需要获取请求参数的名称和值,代码如下: String name = request.getParameter("name"); String age = request.getParameter("age"); 在获取参数时,需要根据具体的参数类型进行转换,例如将字符串类型的参数转换成数字等。 HttpServletRequest也提供了许多其他的方法,可以更方便地进行参数获取、属性的设置等操作。例如,我们还可以用代码request.getAttribute("name")获取请求属性的值。 总之,通过HttpServletRequest对象获取请求参数是Java Servlet开发中的一个重要环节,它可以为我们更方便地处理用户请求提供帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值