springboot controller调用controller,springboot controller注解

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: