Spring Boot 中的 RestController 为我们提供了多种接收参数的方法。
本文中使用 Spring Boot 构建Rest服务实验手册(一) 中的案例演示参数接收的方法。
使用RequestBody接收参数
如果在 HTTP Request 的 Body 中传输的是 json 格式的参数,就可以通过 RequestBody 来装换并接收。可以参考案例中新增待办项的代码:
1 2 3 4 5 6 7 8 9 10
| @PostMapping @ApiOperation(value = "add a todo", notes = "在新增时,id是不需要的,title is requried.") public ApiResult addTodo(@Valid @RequestBody Todo todo) {
ApiResult.ApiResultBuilder builder = ApiResult.builder().succ(true).build().toBuilder();
todoBiz.addTodo(todo);
return builder.build(); }
|
接收URL路径中的参数
在URL的路径中,可以通过 “{}” 的方式来定义参数。如在 TodoApi 中增加一个 GET 方法,根据唯一的 id 来获取一个 Todo 项。可以将URL定义为: /todo/{id}, 则可以在 TodoApi 中新增如下方法:
1 2 3 4 5 6 7 8 9 10 11 12 13
| @GetMapping("/todo/{id}") public ApiResult getTodo(@PathVariable Integer id) {
ApiResult.ApiResultBuilder builder = ApiResult.builder().succ(true).build().toBuilder();
Optional<Todo> optional = todoBiz.getTodo(id); if (optional.isPresent()) { builder.data(optional.get()); } else { builder.succ(false); } return builder.build(); }
|
可以看到,程序是通过 @PathVariable 注解来获取路径中的参数的。
通过RequestParam接收参数
如果按传统的在URL中参数(以问号开头)或是在Body中使用键值对来提交的数据,都可以采用 RequestParam来接收。
如下代码:
1 2 3 4 5 6 7 8 9 10 11
| @GetMapping("/todo/find") public ApiResult getTodoByTitle(@RequestParam("title") String title) {
ApiResult.ApiResultBuilder builder = ApiResult.builder().succ(true).build().toBuilder();
List<Todo> todos = todoBiz.getTodoByTitle(title);
builder.data(todos);
return builder.build(); }
|
可以通过以下的URL来访问:
1
| http://localhost:8080/todo/find?title=jack
|
对日期型参数的处理
在处理日期型产生是比较常用的方法是将其装换为指定格式的字符串。要实现这个功能,只需要在实体类的定义中,针对日期型属性增加对应的注解就可实现。
1 2 3
| @DateTimeFormat(pattern="yyyy-MM-dd") @JsonFormat(pattern="yyyy-MM-dd") private Date currDate;
|