zoukankan      html  css  js  c++  java
  • 0106 springMVC REST风格

    markdown 印象笔记语法练习带快捷键的

    加粗 快捷键 cmd+b
    斜体 cmd+i
    分割线 cmd+u


    编号列表: cmd+shift+o
    无编号列表 cmd+shift+u
    待办事项 cmd+shift+T
    代码块 cmd+shift+P

    1. 编号列表项目1
    2. 编号项目列表2
    • 无编号列表项目1;

    • 无编号列表项目2;

    • [ ] 待办事项1

    • [ ] 待办事项2

    System.out.println("hello world");
    

    背景

    rest是一种http协议的风格,在互联网时代这种风格在微服务中流行起来了,客户端对微服务,微服务之间交互;
    一个URL代表一个资源,里面都是名词;

    REST介绍

    REST 全称 Representational state Transfer 表现层状态转换;是一种软件架构原则;

    1. 资源:具体存在的对象比如用户,角色,菜单,文本,图片,歌曲;用URI来描述;
    2. 表现层:如何表示资源,现在最流行的是json;
    3. 状态转换;资源并不是一成不变的是一个变化的过程,可以经历create,visit,update,delete;

    HTTP的动作

    请求方法 动作
    GET 查询
    POST 新增
    PUT 修改全部
    PATCH 修改部分
    DELETE 删除
    1. URL中不应该出现动词
    2. 版本号放在URL中,应该移动到Header中
    3. 如果参数不多,应该放在path中,而不是通过getParam的方法传递,参数超过4个,应该把参数放到请求体,通过json传递;

    SpringMVC对REST风格的支持

    @RequestMapping是通用的url配置注解,为了支持rest,springboot引入了更多的注解;

    注解 方法 说明
    @GetMapping GET 查询
    @PostMapping POST 新增
    @PutMapping PUT 修改全部
    @PatchMapping PATCH 修改部分
    @DeleteMapping DELETE 删除

    以上注解的方法中可以配置consumers,produces,即接受什么类型的资源请求,输出什么格式的资源;

    1. url上的path参数通过注解@PathVariable配置;
    2. 请求体的参数通过@RequestBody配置;
    3. 返回json数据,在方法申明位置配置@ResponseBody,或者在控制器上配置@RestController;如果需要返回其它格式的数据到客户端,通过协商资源视图解析器来配置;

    渲染结果

    springmvc返回结果的流程有两种:

    1. @ResponseBody注解标识的控制器方法,无需视图解析器,使用MappingJackson2HttpMessageConverter转换输出;
    2. 使用ModelAndView,需要配置视图解析器;

    springMVC容器启动的时候,默认注册了两个HttpMessageConverter,即:
    1.StringHttpMessageConverter; 按照字符串输出;(produces=Text_plan_value)
    2.MappingJackson2HttpMessageConverter;按照json字符串输出;(produces=xxxjson)

    如果按照请求类型,找不到对应的HttpMessageConverter,则会流转到 ContentNegotiatingViewResolver,对结果进行解析;
    springmvc内置了如下的视图解析器:

    1. BeanNameViewResolver;
    2. ViewResolverComposite
    3. InteernalResourceViewResolver;

    @ResponseStatus注解标注在控制器方法上,可以设置响应状态码;
    ResponseEntity对象也可以设置响应状态码和响应头信息;

    统一异常处理
    可以在@ExceptionHandler标注的异常处理方法上,标注@ResponseStatus,统一设置异常返回的响应状态码;

    RestTemplate

    为了完成微服务系统之间的REST调用,springMvC提供了 RestTemplate,它的底层是使用HttpURLConnection实现的;

     public static void testGet(){
             RestTemplate restTemplate = new RestTemplate();
    
            String url = "https://xxx.yyy.com/tiananuser_service/testNewUser/new/{plat}/{start}/{end}?requestId=x";
            Map<String, Object> params = new HashMap<>(3);
            params.put("plat",0);
            params.put("start","2019-12-20");
            params.put("end","2020-01-06");
    
            final ResponseEntity<Object> responseEntity = restTemplate.getForEntity(url, Object.class, params);
    
            System.out.println("responseEntity.getStatusCodeValue() : "+ responseEntity.getStatusCodeValue());
            System.out.println("responseEntity.getBody() : "+ responseEntity.getBody());
    
    
        }
    

    小结

    • 简单的介绍了REST ,即表现层状态转移,是一种架构原则;
    • 介绍了springMVC对REST的支持,提供了5个方法注解;
    • 简单介绍了使用REST访问的客户端RestTemplate ;

    原创不易,转载请注明出处。

  • 相关阅读:
    编程实践56
    诫子篇
    编程实践58
    编程实践55
    C#Process类应该声明个什么引用空间啊 找不到类型或命名空间名称“Process”(是否缺少 using 指令或程序集引用?) 如何解决?
    课堂题目54
    jQuery学习笔记jQuery的动画
    Asp.net生成各种网页快捷方式[转贴]
    jQuery学习笔记Helloworld
    FreeTextBox配置
  • 原文地址:https://www.cnblogs.com/snidget/p/12157849.html
Copyright © 2011-2022 走看看