spring 官方文档-片段学习总结

片段所在连接:https://docs.spring.io/spring/docs/5.0.4.RELEASE/spring-framework-reference/web-reactive.html#webflux-ann-controller

片段目录:

     

1.4章节简述

  SpringWebFlux提供了一个基于注释的编程模型,其中@Controller和@RestController组件使用注释来表示请求映射、请求输入、异常处理等等。带注释的控制器具有灵活的方法签名,不需要扩展基类或实现特定的接口。

1.4.1 @Controller ,表示一个类是控制器并自动被容器侦测。

  1. @Target({ElementType.TYPE}) #注解的作用目标——接口、类、枚举、注解
  2. @Retention(RetentionPolicy.RUNTIME)#保留至运行时
  3. @Documented #被javadoc工具记录
  4. @Component #视为组件,被容器自动侦测
  5. public @interface Controller {
  6. String value() default "";
  7. }

@RestController ,表示一个类是控制器并自动被容器侦测;将控制器返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区。

  1. @Target(ElementType.TYPE)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Controller
  5. @ResponseBody #将控制器返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区
  6. public @interface RestController {
  7. String value() default "";
  8. }

1.4.2 Request Mapping

  @RequestMap注释用于将请求映射到控制器方法。它具有按URL、HTTP方法、请求参数、标头和媒体类型匹配的各种属性。

它可以在类级别用于表示共享映射,也可以在方法级别用于缩小到特定的端点映射。

  1. @Target({ElementType.METHOD, ElementType.TYPE}) #注解的作用目标——方法;接口、类、枚举、注解。
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Mapping
  5. public @interface RequestMapping {
  6.  
  7. String name() default "";#为当前映射指定一个名称,不常用,一般不会指定
  8.  
  9. @AliasFor("path")#属性的别名
  10. String[] value() default {};#value path 等价
  11.  
  12. @AliasFor("value")#属性的别名
  13. String[] path() default {};#value path 等价
  14.  
  15. RequestMethod[] method() default {};#约束映射到的HTTP请求方法;GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
    #根据这些特定方法,分别有RequestMapping的相应变体。
  1. String[] params() default {};#约束请求参数,例如:params = "myParam=myValue" ;处理请求中包含了名为“myParam”,值为“myValue”的请求
  2.  
  3. String[] headers() default {};#约束请求头,例如:headers = "content-type=text/*"
  4.  
  5. String[] consumes() default {};#约束请求可消费的媒体类型,例如:consumes = {"text/plain", "application/*"}
  6.      
  7. String[] produces() default {};#约束请求可生成的媒体类型,例如:produces = {"text/plain", "application/*"}
  8. }

它还有几个HTTP方法的快捷变体(可类比对数据库的操作理解):

  • @GetMapping         查

  • @PostMapping        改\增

  • @PutMapping         增

  • @DeleteMapping      删

  • @PatchMapping       用于将HTTP{@code Patch}请求映射到特定处理程序方法的注释【还不理解】

1.4.3 Handler methods

  常见的控制器方法参数注解:@PathVariable、@RequestParam、@RequestHeader、@ModelAttribute、@SessionAttributes@SessionAttribute

、@CookieValue、@RequestBody、@RequestPart。分别举例演示:

@PathVariable
  1. // GET /pets/42
  2. @GetMapping("/pets/{petId}")
  3. public void findPet(@PathVariable String petId) {
  4.  
  5. // petId == 42
  6. }

@RequestParam

  1. @GetMapping
  2. public String setupForm(@RequestParam("petId") int petId, Model model) {
  3. Pet pet = this.clinic.loadPet(petId);
  4. model.addAttribute("pet", pet);
  5. return "petForm";
  6. }

@RequestHeader

  1. /**
    模拟请求头
  1. Host localhost:8080
  2. Accept text/html,application/xhtml+xml,application/xml;q=0.9
  3. Accept-Language fr,en-gb;q=0.7,en;q=0.3
  4. Accept-Encoding gzip,deflate
  5. Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
  6. Keep-Alive 300
  7.  
  8. */
  1. @GetMapping("/demo")
  2. public void handle(
  3. @RequestHeader("Accept-Encoding") String encoding,
  4. @RequestHeader("Keep-Alive") long keepAlive) {
  5. //...
  6. }

@ModelAttribute

  1. @PostMapping("/owners/{ownerId}/pets/{petId}/edit")
  2. public String processSubmit(@ModelAttribute Pet pet) { } # ownerId petId 需要和对象Pet的参数key匹配。

@SessionAttributes ,用于类级注解,用来存储请求间的模型数据,同级别的子节点共享数据。

  1. @Controller
  2. @SessionAttributes("pet")
  3. public class EditPetForm {
  4.  
  5. // ...
  6.  
  7. @PostMapping("/pets/{id}")
  8. public String handle(Pet pet, BindingResult errors, SessionStatus status) {
  9. if (errors.hasErrors) {
  10. // ...
  11. }
  12. status.setComplete();
  13. // ...
  14. }
  15. }
  16. }

@SessionAttribute,根属性数据,全部节点共享数据。

如果您需要访问全局管理的预先存在的会话属性,即控制器外部(例如,通过过滤器),并且可能存在或不存在,则可以使用方法参数上的@SessionAttribute注释。

  1. @GetMapping("/")
  2. public String handle(@SessionAttribute User user) {
  3. // ...
  4. }

@CookieValue

  1. //模拟cookie JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
  2.  
  3. @GetMapping("/demo")
  4. public void handle(@CookieValue("JSESSIONID") String cookie) {
  5. //...
  6. }

@RequestBody,使用@RequestBody注释通过HttpMessageReader读取请求体并将其反序列化为对象

  1. //@Valid 序列化后对象必须匹配,否则报 WebExchangeBindException,响应BAD_CODE为:400
  1. @PostMapping("/accounts")
  2. public void handle(@Valid @RequestBody Account account, BindingResult result) {
  3. // ...
  4. }

@RequestPart

  1. /**
  2. Multipart requests can also be submitted from non-browser clients in a RESTful service scenario. For example a file along with JSON:
  3.  
  4. POST /someUrl
  5. Content-Type: multipart/mixed
  6.  
  7. --edt7Tfrdusa7r3lNQc79vXuhIIMlatb7PQg7Vp
  8. Content-Disposition: form-data; name="meta-data"
  9. Content-Type: application/json; charset=UTF-8
  10. Content-Transfer-Encoding: 8bit
  11.  
  12. {
  13. "name": "value"
  14. }
  15. --edt7Tfrdusa7r3lNQc79vXuhIIMlatb7PQg7Vp
  16. Content-Disposition: form-data; name="file-data"; filename="file.properties"
  17. Content-Type: text/xml
  18. Content-Transfer-Encoding: 8bit
  19. ... File Data ...
  20. */
  21. @PostMapping("/")
  22. public String handle(@RequestPart("meta-data") MetaData metadata,
  23. @RequestPart("file-data") FilePart file) {
  24. // ...
  25. }

1.4.4. Model Methods

@ModelAttribute注释可以在@RequestMapping方法参数上使用,以从模型创建或访问对象并将其绑定到请求。@ModelAttribute还可以用作控制器方法的方法级注释,其目的不是处理请求,而是在请求处理之前添加常用的模型属性。

控制器可以有任意数量的@ModelAttribute方法。所有这些方法都在同一个控制器中的@RequestMapping方法之前调用。还可以通过@ControllerAdview在控制器之间共享@ModelAttribute方法。有关详细信息,请参阅关于Controller通知的部分。

@ModelAttribute方法具有灵活的方法签名。除了@ModelAttribute本身或与请求主体相关的任何内容之外,它们支持与@RequestMapping方法相同的许多参数。

1.4.5、1.4.6 略

spring 官方文档-片段学习——webflux-ann-controller的更多相关文章

  1. spring官方文档中文版

    转 http://blog.csdn.net/tangtong1/article/details/51326887 spring官方文档:http://docs.spring.io/spring/do ...

  2. 从官方文档去学习之FreeMarker

    一.前言 上一篇 <从现在开始,试着学会用官方文档去学习一个技术框架>提倡大家多去从官方文档学习技术,没有讲到具体的实践,本篇就拿一个案例具体的说一说,就是FreeMarker,选择这个框 ...

  3. 转 spring官方文档中文版

    转 http://blog.csdn.net/tangtong1/article/details/51326887另附码云地址 https://gitee.com/free/spring-framew ...

  4. Spring官方文档下载

    Spring框架是目前最流行的java web开发框架,很多时候,我们需要去查看spring的官方文档,这里就简单介绍下如何下载其官方文档. 1.搜索到spring 官网并进入 2.点击DOCS 3. ...

  5. TensorFlow 官方文档中文版学习

    TensorFlow 官方文档中文版 地址:http://wiki.jikexueyuan.com/project/tensorflow-zh/

  6. 20191224 Spring官方文档(启动)

    再学Spring 之前看过Spring教学视频,看过<Spring5高级编程>,但是对于Spring始终还是感觉差了一点,应该是底层没有学好,这次再学Spring,就是要将Spring底层 ...

  7. Spring官方文档

    官网里还真不好找,编译的时候pdf版还没编译成功,这里记录下 http://docs.spring.io/spring/

  8. 20191224 Spring官方文档(Core 1.1-1.4)

    1. IoC容器 1.1.Spring IoC容器和Bean简介 org.springframework.beans和org.springframework.context包是Spring框架的IoC ...

  9. 20191224 Spring官方文档(Overview)

    Spring框架概述 从Spring Framework 5.1开始,Spring需要JDK 8+(Java SE 8+),并提供对JDK 11 LTS的现成支持.建议将Java SE 8更新60作为 ...

随机推荐

  1. CRM:异步加载下拉列表,三个列表出现同样的下拉框

    异步加载下拉列表,三个列表出现同样的下拉框,原因如下: Spring默认单例,如果Action是单例,那么上一次查询的结果就可能被下一次的查询所调用.所以必须配置action为多例, 如果采用单例模式 ...

  2. ssm框架前后端数据交互完整示例

    1.sprinMvc控制层 package com.dengfeng.house.controller; import java.text.ParseException; import java.ut ...

  3. NO29 用户提权sudo配置文件详解实践--志行为审计

     用户提权sudo配置文件详解实践: 放到visudo里:  验证权限:

  4. PLCsim 软件模拟OB86故障

    用上一节 组态DP主站与标准从站的方法 组态了网络 实现了 将profibus –dp 标准从站 ET200M 下 输入地址为IW2 接口的状态 读取到 主机 DP-315-2DP 的QW0 变量以来 ...

  5. CodeForces - 869A The Artful Expedient

    题意:有两个序列X和Y,各含n个数,这2n个数互不相同,若满足xi^yj的结果在序列X内或序列Y内的(xi,yj)对数为偶数,则输出"Karen",否则输出"Koyomi ...

  6. 编程题目 定义栈的数据类型,请在类型中实现一个能够得到栈最小元素的minx函数。

    首先自己用 节点 实现了 栈 这种数据类型 为了实现题目了要求,我使用的两个栈. 一个栈 用来 push pop 用户的数据, 另外一个栈用来存放 最小元素(涉及元素比较) 代码如下: #!/usr/ ...

  7. spingboot2.0外部引入xml配置文件时找不到文件等报错

    之前的项目可以启动,后面不知道为什么都不行了,报错如下: SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found bindin ...

  8. 冰蝎动态二进制加密WebShell基于流量侧检测方案

    概述 冰蝎是一款新型动态二进制加密网站工具.目前已经有6个版本.对于webshell的网络流量侧检测,主要有三个思路.一:webshell上传过程中文件还原进行样本分析,检测静态文件是否报毒.二:we ...

  9. Vue父组件向子组件传值

    父组件向子组件传值 组件实例定义方式,注意:一定要使用props属性来定义父组件传递过来的数据 <script> // 创建 Vue 实例,得到 ViewModel var vm = ne ...

  10. Python 常用的标准库以及第三方库有哪些?

    作者:史豹链接:https://www.zhihu.com/question/20501628/answer/223340838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...