专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

SpringBoot学习系列-SpringMvcREST

SpringMvc-REST

REST 理论基础

RPC ( Remote Procedure Call )

  • 语言相关
    • Java – RMI(Remote Method Invocation)
    • .NET – COM+、
  • 语言无关
    • SOA
      • Web Services
        • SOAP(传输介质协议)
        • HTTP、SMTP(通讯协议)
    • 微服务(MSA)
      • REST
        • HTML、JSON、XML 等等
        • HTTP(通讯协议)
          • HTTP 1.1
            • 短连接
            • Keep-Alive
            • 连接池
            • Long Polling
          • HTTP/2
            • 长连接
        • 技术
          • Spring 客户端 : RestTemplate
          • Spring WebMVC : @RestController = @Controller + @ResponseBody + @RequestBody
          • Spring Cloud : RestTemplate 扩展 + @LoadBalanced

REST(英文)

Cacheability(可缓存性)

@ResponseBody -> 响应体(Response Body)

  • 响应(Response)
    • 响应头(Headers)
      • 请求方法
        • HEAD
      • 元信息(Meta-Data)
        • Accept-Language -> Locale
        • Connection -> Keep-Alive
      • 实现

        多值 Map MultiValueMap

        Key : Value = 1 : N

        Name : Value = 1 : N

            public class HttpHeaders implements MultiValueMap<String, String>, Serializable {
                //存放了许多请求头的元信息
                ...
            }

 *  响应体

     *  业务信息(Business Data)
     *  Body:HTTP 实体、REST

         *  `@ResponseBody`
         *  `HttpEntity.body` 属性(泛型结构)
     *  Payload : 消息 JMS、事件、SOAP
    public class HttpEntity<T> {
        ...
        private final HttpHeaders headers;

        @Nullable
        private final T body;
    }

HTTP 状态码(org.springframework.http.HttpStatus

  • 200

    • org.springframework.http.HttpStatus#OK
  • 304
    • org.springframework.http.HttpStatus#NOT_MODIFIED
    • 第一次完整请求,获取响应头(200),直接获取
    • 第二次请求,只读取头信息,响应头(304),客户端(流量器)取上次 Body 结果
  • 400
    • org.springframework.http.HttpStatus#BAD_REQUEST
  • 404
  • 500

Uniform interface(统一接口)

资源定位 – URI
资源操作 – HTTP 动词

GET

  • @GetMapping
    • 注解属性别名和覆盖(github.com/spring-proj…
      • Spring Framework 4.2 引入
        • Spring Boot 1.3 才可以使用
      • Spring Boot 加以发展
        @RequestMapping(method = RequestMethod.POST) // 注解“派生性”
        public @interface PostMapping {
            ...
            @AliasFor(annotation = RequestMapping.class) // 注解别名
            String name() default "";
            ...
        }

    `@PostMapping` 是注解,`@RequestMapping` 是 `@PostMapping` 的注解:

     *  `@RequestMapping` 是 `@PostMapping` 的元注解
     *  `@RequestMapping` 元标注了 `@PostMapping`

    `@AliasFor` 只能标注在目标注解的属性,所`annotation()`的注解必须是元注解,该注解 `attribute()` 必须元注解的属性

PUT

  • @PutMapping

POST

  • @PostMapping

PATCH

  • @PatchMapping
  • 限制
    • Servlet API 没有规定 PATCH
    • Spring Web 对其做了扩展
        public abstract class FrameworkServlet extends HttpServletBean implements ApplicationContextAware {

            ...
        protected void service(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {

                HttpMethod httpMethod = HttpMethod.resolve(request.getMethod());
                if (httpMethod == HttpMethod.PATCH || httpMethod == null) {
                    processRequest(request, response);
                }
                else {
                    super.service(request, response);
                }
            }
            ...
        }

DELETE

  • @DeleteMapping

自描述消息

注解驱动
  • @RequestBody

    JSON -> MappingJackson2HttpMessageConverter

    TEXT -> StringHttpMessageConverter

  • @ResponseBody

    JSON -> MappingJackson2HttpMessageConverter

    TEXT -> StringHttpMessageConverter

返回值处理类:RequestResponseBodyMethodProcessor

接口编程

ResponseEntity extends HttpEntity

RequestEntity extends HttpEntity

返回值处理类:HttpEntityMethodProcessor

媒体类型(MediaType
  • org.springframework.http.MediaType#APPLICATION_JSON_UTF8_VALUE
    • “application/json;charset=UTF-8”

HTTP 消息转换器(HttpMessageConverter

  • application/json
    • MappingJackson2HttpMessageConverter
  • text/html
    • StringHttpMessageConverter

代码导读

@EnableWebMvc

  • 导入 DelegatingWebMvcConfiguration(配置 Class)
    • 注册 WebMvcConfigurer
      • 装配各种 Spring MVC 需要的Bean
      • 注解驱动扩展点
        • HandlerMethodArgumentResolver
        • HandlerMethodReturnValueHandler
        • @RequestBody@ResponseBody 实现类
          • RequestResponseBodyMethodProcessor
          • HttpEntityMethodProcessor

实现 WebMvcConfigurer

WebMvcConfigurerAdapter 实现

URI 与 URL

U : Uniform

R : Resource

I:鉴别

L : 定位

山东和河南都有一个张三,张三就是URI,具体的河南的张三或者山东的张三就是URL

URI

  URI = scheme:[//authority]path[?query][#fragment]

scheme : HTTP、wechat

URL

protocol 协议

文章永久链接:https://tech.souyunku.com/44690

未经允许不得转载:搜云库技术团队 » SpringBoot学习系列-SpringMvcREST

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们