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;
}
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;
}
content-type: multipart/form-data
评价同GET方法接收方式三。
三、通过自定义对象接收请求参数
@PostMapping("/g")
public Object g(@Valid Book book) {
return book;
}
content-type: multipart/form-data
评价同GET方法接收方式四。
以上三种方式content-type
都是multipart/form-data
。
四、通过@RequestBody接收请求参数
@PostMapping("/h")
public Object h(@Valid @RequestBody Book book) {
return book;
}
这种方式处理的content-type
是application/json
。
content-type: application/json
附录
Book.java
@Data
public class Book {
@NotNull
private Integer id;
@NotBlank
private String bookName;
@NotBlank
private String authorName;
}