Spring Boot - 控制器接收请求参数的几种方式

Get方法接收请求参数方式

方式一、使用HttpServletRequest接收请求参数

@GetMapping("/a")
public Object a(HttpServletRequest request) {
    Integer id = 0;
    if (StrUtil.isNotBlank(request.getParameter("id"))) {
        id = Integer.parseInt(request.getParameter("id"));
    }
    String bookName = request.getParameter("bookName");
    String authorName = request.getParameter("authorName");
    Book book = new Book();
    // 调用set方法设置属性值
    return book;
}

调用链接示例:http://localhost:9000/book/a?authorName=老舍&bookName=《骆驼祥子》&id=1。

这种方式,我们每获取一个参数都要调用一次HttpServletRequest的getParameter()方法,而且getParameter()方法的返回值的类型为String类型,如果我们的参数类型不是String还需要手动转换类型。

总体来讲,不推荐这种方式。

方式二、使用@PathVariable接收请求参数

@GetMapping("/{id}/{bookName}/{authorName}")
public Object b(@PathVariable Integer id,
                @PathVariable("bookName") String bookName,
                @PathVariable("authorName") String authorName) {
    log.info("book name: {}", bookName);
    log.info("author name: ", authorName);
    Book book = new Book();
    // 调用set方法设置属性值
    return book;
}

调用链接示例:http://localhost:9000/book/1/《骆驼祥子》/老舍。

这种接收请求参数的方式还是比较优雅的。

我们在平时的项目中不怎么用这种方式,个人喜爱吧。

方式三、通过方法参数接收请求参数

@GetMapping("/c")
public Object c(Integer id,
                String bookName,
                String authorName) {
    log.info("id: {}", id);
    log.info("book name: {}", bookName);
    log.info("author name: ", authorName);
    Book book = new Book();
    // 调用set方法设置属性值
    return book;
}

调用链接示例:http://localhost:9000/book/c?id=1&authorName=老舍&bookName=《骆驼祥子》。

这种方式,我们什么都不用做,只需要方法参数名与URL中的请求参数名保持一致就可以成功接收到参数,URL也是最常见的格式。

我们的项目中接收3个以下的参数时,通常会用这种方式。

方式四、通过自定义对象接收请求参数

@GetMapping("/d")
public Object d(@Valid Book book) {
    return book;
}

调用链接示例:http://localhost:9000/book/d?id=1&authorName=老舍&bookName=《骆驼祥子》。

这种方式那是相当简洁。当参数大于3个的时候推荐使用这种方式。而且在自定义对象我们还可以加入一些参数验证,比如NotNull、NotBlank等。

Post方法接收请求参数方式

方式一、使用HttpServletRequest接收请求参数

@PostMapping("/e")
public Object e(HttpServletRequest request) {
    Integer id = 0;
    if (StrUtil.isNotBlank(request.getParameter("id"))) {
        id = Integer.parseInt(request.getParameter("id"));
    }
    String bookName = request.getParameter("bookName");
    String authorName = request.getParameter("authorName");
    Book book = new Book();
    // 调用set方法设置属性值
    return book;
}
Spring Boot | 控制器接收请求参数的几种方式

content-type: multipart/form-data

评价同GET方法接收方式一。

方式二、通过方法参数接收请求参数

@PostMapping("/f")
public Object f(Integer id,
                String bookName,
                String authorName) {
    log.info("id: {}", id);
    log.info("book name: {}", bookName);
    log.info("author name: ", authorName);
    Book book = new Book();
    // 调用set方法设置属性值
    return book;
}
Spring Boot | 控制器接收请求参数的几种方式

content-type: multipart/form-data

评价同GET方法接收方式三。

方式三、通过自定义对象接收请求参数

@PostMapping("/g")
public Object g(@Valid Book book) {
    return book;
}
Spring Boot | 控制器接收请求参数的几种方式

content-type: multipart/form-data

评价同GET方法接收方式四。

以上三种方式content-type都是multipart/form-data。

方式四、通过@RequestBody接收请求参数

@PostMapping("/h")
public Object h(@Valid @RequestBody Book book) {
    return book;
}
Spring Boot | 控制器接收请求参数的几种方式

这种方式处理的content-type是application/json。

附录

接收参数的对象封装 —— Book.java

@Data
public class Book {
    @NotNull
    private Integer id;
    @NotBlank
    private String bookName;
    @NotBlank
    private String authorName;
}



发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章