SpringBoot各种Controller写法 |
您所在的位置:网站首页 › 吉的几种写法怎么写的 › SpringBoot各种Controller写法 |
最近玩SpingBoot,以下是一些Controller的各种写法 本文我们将分为四部分: 1、Controller的类型(传统的 和 REST) 2、路由(Routes) 3、如何接收数据 4、Controller示例 Controller 类型 你也许每天都在使用Spring ,但你知道controller有几种类型吗?其实controller是有两种的,一种就是传统的web的那种controller,而另外一种就是REST类型的controller。 @Controller 通常是被使用服务于web 页面的。默认,你的controller方法返回的是一个string 串,是表示要展示哪个模板页面或者是要跳转到哪里去。 @RestController 就是专门用在编写API的时候,特别那种返回一个JSON,或者是XML等等。然后方法返回的是可以是一个对象,是一个可以被序列化的对象。 当然了你也可以通过controller来实现返回JSON、XML这些。只是这里为了"REST",得另立门户,这样会更加的清晰明了。 路由(Routes) 这里的路由就是指http method。(GET,POST,PUT,PATCH,DELETE)。 HTTP Methods 在Spring boot中,http method可以被用类似“*Mapping”的格式来表示: @GetMapping @PostMapping @PutMapping @PatchMapping @DeleteMapping 然后这些注解中可以添加path,像下面这样: 例子: @GetMapping("/users") 一个比较典型的REST controller 一般是像下面这样来映射路由的: @RestController public class UsersController { @GetMapping("/users") public List index() {...} @GetMapping("/users/{id}") public User show(...) {...} @PostMapping("/users") public User create(...) {...} @PutMapping("/users/{id}") public User update(...) {...} @DeleteMapping("/users/{id}") public void delete(...) {...} }还有一种比较常见的做法是通过在controller类上添加一个@RequestMapping注解。这样相当于可以把上面的所有的mapping前缀添加到这里。 像下面这样(基于上面的例子修改): @RestController @RequestMapping("/users") public class UsersController { @GetMapping public List index() {...} @GetMapping("{id}") public User show(...) {...} @PostMapping public User create(...) {...} @PutMapping("{id}") public User update(...) {...} @DeleteMapping("{id}") public void delete(...) {...} }返回状态 Controller的方法可以去指定一个返回状态码。默认的是返回一个200 OK,如果是没有返回值(void)则返回 204 No Content。 @PostMapping @ResponseStatus(HttpStatus.CREATED) public User create(...) {...}路径变量 你可以通过添加@PathVariable注解来把路径上的值捕获下来: // DELETE /users/123 @DeleteMapping("/users/{id}") public void delete(@PathVariable long id) {...}默认情况下,参数名必须要和路径上的变量名一样。但你也可以通过下面的方式来修改,就是你通过给@PathVariable赋值为路径变量名,然后参数名就可以是不一样的了: // GET /users/[email protected]/edit @GetMapping("/users/{email}/edit" public String edit(@PathVariable("email") String userEmail) {...}接收数据 查询字符参数 如果是通过?xxx=xxx&yyy=yyy来传递过来的参数,那么我们可以通过@RequestParam来获取: // GET /users?count=10 @GetMapping("/users") public List index(@RequestParam int count) {...}默认的话,变量名必须要和查询字符参数是一样的。你也可以通过下面的方式来修改: // GET /users?num_per_page=50 @GetMapping("/users") public List index(@RequestParam("num_per_page") int numPerPage) {...}提交HTML表单数据 如果我们想要创建一个用户。这时候,我么可能在前端,写下面这样一个form: Create User现在我们创建一个请求模型,用来匹配我们的前端form结构: class UserCreateRequest { private String name; private String email; /* Getters & Setters omitted */ }然后我们就可以在controller对应的方法上来捕获form里的值,我们通过对参数添加一个@ModelAttribute注解就可以实现了: @PostMapping("/users") public User create(@ModelAttribute UserCreateRequest request) {...}提交JSON 就像上面例子那样,我们创建一个用户,然后是一个JSON格式: { "name": "Som Eone", "email": "[email protected]"} 然后请求模型还是沿用之前的: class UserCreateRequest { private String name; private String email; } 然后我们使用@RequestBody来捕获前端发送过来的JSON串,然后反序列化到我们的请求模型UserCreateRequest: @PostMapping public User create(@RequestBody UserCreateRequest request) {...} Controller 举例 以下是使用上述所有注解创建Controller的示例。 没有具体逻辑,只是简单的展示上面说到的各个注解。 传统的controller 这类型的controller返回值表示要展示的页面或要跳转到哪个请求。 @Controller @RequestMapping("/users") public class UsersController { @GetMapping public String index() { return "users/index"; } @GetMapping("{id}") public String show(@PathVariable long id) { return "users/show"; } @PostMapping @ResponseStatus(HttpStatus.CREATED) public String create(@ModelAttribute UserCreateRequest request) { return "redirect:/users"; } @PutMapping("{id}") public String update(@PathVariable long id, @RequestBody UserUpdateRequest request) { return "redirect:/users/" + id; } @DeleteMapping("{id}") public String delete(@PathVariable long id) { return "redirect:/users"; } }REST controller 这类型的controller返回值是一些对象,这些对象要被序列化成JSON、XML等其他格式,并不是表示要跳转到哪个HTML模板。 @RestController @RequestMapping("/users") public class UsersController { @GetMapping public List index() { return new ArrayList(); } @GetMapping("{id}") public User show(@PathVariable long id) { return new User(); } @PostMapping @ResponseStatus(HttpStatus.CREATED) public User create(@RequestBody UserCreateRequest request) { return new User(); } @PutMapping("{id}") public User update(@PathVariable long id, @RequestBody UserUpdateRequest request) { return new User(); } @DeleteMapping("{id}") public void delete(@PathVariable long id) {} } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |