springboot controller调用controller,springboot controller注解
00-1010控制器1的注意事项。控制器主要有两个标签2。使用@Controller标签时如何编写各种控制器?我们将它们分成四个部分:控制器类型、路由、接收数据、控制器等。
目录
弹簧靴的控制器水特别深。经过学习,我总结一些小技巧,供以后参考,减少错误:
关于controller注意事项
@Controller和@RestController,这两个标签不能同时起作用。前者标记的类只能返回静态文件,后者标记的类用于返回json字符串等数据类型。
1.controller主要有两个标签
模板下的文件无法识别(我自己试过,发现和网上很多说法不一样)。只能直接读取静态文件夹下的文件。具体代码如下:
@RequestMapping(value=/,method=RequestMethod。GET)public String home(){ return views/index . html ;}这里static是作为根目录访问的。
00-1010最近玩SpingBoot。下面是编写控制器的各种方法。
00-1010 1.控制器的类型(传统和REST)2。路线)3。如何接收数据。控制器的例子
2.使用@Controller标签时
你可能每天都在用Spring,但是你知道控制器有几种类型吗?实际上有两种控制器,一种是传统的web控制器,另一种是REST控制器。
@Controller通常用于服务网页。默认情况下,控制器方法返回一个字符串,指示显示哪个模板页面或跳转到哪里。
@RestController是专门用来写API的,尤其是当它返回一个JSON,或者XML等的时候。然后,该方法返回一个可以是对象并且可以序列化的对象。
当然,也可以通过控制器返回JSON和XML。就为了这里的‘休息’,我们还要另设一个入口,会越来越清晰。
这里的00-1010路由指的是http方式。(获取,发布,上传,修补,删除).
HTTP Methods
在Spring boot中,http方法可以用类似“*Mapping”的格式表示:
@ get mapping @ post mapping @ put mapping @ patch mapping @ delete mapping然后您可以添加这些注释的路径,如下所示:
例子: @GetMapping("/users")
典型的REST控制器通常如下映射路线:
@ RestControllerpublic class users controller { @ get mapping(/users )public ListUser index(){.} @GetMapping(/users/{id} )公共用户显示(.) {.} @PostMapping(/users )公共用户创建(.) {.} @PutMapping(/users/{id} )公共用户更新(.) {.} @ delete mapping(/users/{ id } )Public delete(.) {.}}另一种常见的做法是向控制器类添加@RequestMapping注释。这样的
相当于可以把上面的所有的mapping前缀添加到这里。
像下面这样(基于上面的例子修改):
@RestController@RequestMapping("/users")public class UsersController { @GetMapping public List<User> 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/me@example.com/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<User> index(@RequestParam int count) {...}
默认的话,变量名必须要和查询字符参数是一样的。你也可以通过下面的方式来修改:
// GET /users?num_per_page=50@GetMapping("/users")public List<User> index(@RequestParam("num_per_page") int numPerPage) {...}
提交HTML表单数据
如果我们想要创建一个用户。这时候,我么可能在前端,写下面这样一个form:
<form action="/users" method="POST"> <input name="name"/> <input name="email"/> <button type="submit">Create User</button></form>
现在我们创建一个请求模型,用来匹配我们的前端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": "someone@example.com"}
然后请求模型还是沿用之前的:
class UserCreateRequest {undefinedprivate String name;private String email; }
然后我们使用@RequestBody来捕获前端发送过来的JSON串,然后反序列化到我们的请求模型UserCreateRequest:
@PostMappingpublic 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<User> index() { return new ArrayList<User>(); } @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) {}}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。