0106 springMVC REST风格
markdown 印象笔记语法练习带快捷键的
加粗 快捷键 cmd+b
斜体 cmd+i
分割线 cmd+u
编号列表: cmd+shift+o
无编号列表 cmd+shift+u
待办事项 cmd+shift+T
代码块 cmd+shift+P
- 编号列表项目1
- 编号项目列表2
无编号列表项目1;
无编号列表项目2;
[ ] 待办事项1
[ ] 待办事项2
System.out.println("hello world");
背景
rest是一种http协议的风格,在互联网时代这种风格在微服务中流行起来了,客户端对微服务,微服务之间交互;
一个URL代表一个资源,里面都是名词;
REST介绍
REST 全称 Representational state Transfer 表现层状态转换;是一种软件架构原则;
- 资源:具体存在的对象比如用户,角色,菜单,文本,图片,歌曲;用URI来描述;
- 表现层:如何表示资源,现在最流行的是json;
- 状态转换;资源并不是一成不变的是一个变化的过程,可以经历create,visit,update,delete;
HTTP的动作
| 请求方法 | 动作 |
|---|---|
| GET | 查询 |
| POST | 新增 |
| PUT | 修改全部 |
| PATCH | 修改部分 |
| DELETE | 删除 |
- URL中不应该出现动词
- 版本号放在URL中,应该移动到Header中
- 如果参数不多,应该放在path中,而不是通过getParam的方法传递,参数超过4个,应该把参数放到请求体,通过json传递;
SpringMVC对REST风格的支持
@RequestMapping是通用的url配置注解,为了支持rest,springboot引入了更多的注解;
| 注解 | 方法 | 说明 |
|---|---|---|
| @GetMapping | GET | 查询 |
| @PostMapping | POST | 新增 |
| @PutMapping | PUT | 修改全部 |
| @PatchMapping | PATCH | 修改部分 |
| @DeleteMapping | DELETE | 删除 |
以上注解的方法中可以配置consumers,produces,即接受什么类型的资源请求,输出什么格式的资源;
- url上的path参数通过注解@PathVariable配置;
- 请求体的参数通过@RequestBody配置;
- 返回json数据,在方法申明位置配置@ResponseBody,或者在控制器上配置@RestController;如果需要返回其它格式的数据到客户端,通过协商资源视图解析器来配置;
渲染结果
springmvc返回结果的流程有两种:
- @ResponseBody注解标识的控制器方法,无需视图解析器,使用MappingJackson2HttpMessageConverter转换输出;
- 使用ModelAndView,需要配置视图解析器;
springMVC容器启动的时候,默认注册了两个HttpMessageConverter,即:
1.StringHttpMessageConverter; 按照字符串输出;(produces=Text_plan_value)
2.MappingJackson2HttpMessageConverter;按照json字符串输出;(produces=xxxjson)
如果按照请求类型,找不到对应的HttpMessageConverter,则会流转到 ContentNegotiatingViewResolver,对结果进行解析;
springmvc内置了如下的视图解析器:
- BeanNameViewResolver;
- ViewResolverComposite
- 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 ;
原创不易,转载请注明出处。
0106 springMVC REST风格的更多相关文章
- SpringMVC -rest风格修改删除
REST风格
- SpringMVC REST 风格请求介绍及简单实践
简介 REST 即 Representational State Transfer.(资源)表现层状态转化.是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越 ...
- SpringMVC REST 风格静态资源访问配置
1 在web.xml中使用默认servlet处理静态资源,缺点是如果静态资源过多,则配置量会比较大,一旦有遗漏,则会造成资源无法正常显示或404错误. <!-- 静态资源访问控制 --> ...
- SpringMVC RESTful风格URL处理带点的参数
使用了RESTful风格的URL.但是在处理带点的搜索参数,比如baidu.com的时候,后台就取不到正确的参数了. 搜索了下原因,原来是SpringMVC将点号看作扩展分隔符号了,因此后台没法拿到正 ...
- springmvc REST风格的URL
1:需要配置一个filter <!-- 配置 org.springframework.web.filter.HiddenHttpMethodFilter: 可以把 POST 请求转为 DELET ...
- SpringMVC传统风格控制器和基于注解的控制器
SpringMVC的DispatcherServlet 之前说过springMVC是使用Servlet作为控制器,就是这个用于调度的DispatcherServlet了.这个是servlet,可以根据 ...
- springmvc restful风格操作
ssm框架 controller: package com.sgcc.controller; import java.util.ArrayList; import java.util.List; im ...
- SpringMVC restful风格
1.Spring对REST的支持 Spring3(这里讨论Spring3.2+)对Spring MVC的一些增强功能为REST提供了良好的支持.Spring对开发REST资源提供以下支持: 操作方式: ...
- SpringMVC restful风格下载文件,文件后缀被截掉
原文:https://blog.csdn.net/wisdomhealth/article/details/78400421 @RequestMapping("/file/{filename ...
随机推荐
- JAVA中final关键字的作用
一.final关键字的功能概述 final关键字可以用来修饰引用.方法和类. 1.用来修饰一个引用 如果引用为基本数据类型,则该引用为常量,该值无法修改: 如果引用为引用数据类型,比如对象.数组,则该 ...
- 【转】spring IOC和AOP的理解
spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实 ...
- C++ — 后缀表达式转表达式树
2018-07-21 16:57:26 update 建立表达式树的基本思路:方法类似由下而上建立堆的思想,所以时间复杂度为O(n),这样算法就会变得很简单,只用考虑处理需要入栈的节点和栈中的节点即可 ...
- Eth合约攻击续
合同代表一个非常简单的游戏:谁给它发送了比当前奖金还大的数量的以太,就成为新的国王.在这样的事件中,被推翻的国王获得了新的奖金,但是如果你提交的话那么合约就会回退,让level重新成为国王,而我们的目 ...
- Python 基础之面向对象类的继承与多态
一.继承 定义:一个类除了拥有自身的属性方法之外,还拥有另外一个类的属性和方法继承: 1.单继承 2.多继承子类: 一个类继承了另外一个类,那么这个类是子类(衍生类)父类:一个类继承了另外一个类,被继 ...
- C语言调试器GDB和LLDB的使用方法
调试器的使用 编译输出带调试信息的程序 调试信息包含:指令地址.对应源代码及行号 指令完成后,回调 LINUX使用GDB MAX使用LLDB 使用说明 // 开始调试testlib程序 lldb te ...
- C++11并发编程2------线程管理
本节内容: 启动一个线程 每个程序都至少会有一个线程,main函数是执行入口,我们称之为主线程,其余子线程有各自的入口函数,主线程和子线程同时运行.子线程在std::thread对象创建时启动. 1. ...
- 把PHP大牛记下来,方便以后关注
本帖最后由 fish_study 于 2014-12-31 00:18 编辑 五四陈科学院博主54chen(陈臻),哥学社创始人,前人人网分布式存储nuclear研发人员,现关注erlang.hado ...
- unity优化-CPU(网上整理)
CPU方面性能考虑:引擎和代码渲染模块.动画模块.物理模块.ui模块.粒子模块.加载模块.GC模块最重要的是渲染模块.UI模块和加载模块1.渲染模块主要是:场景.物体和特效的渲染a.降低Draw ca ...
- python如何在文件每一行前面加字符串?
对于python中原来的文件,需要在每一行前面添加一个特舒符号,比如逗号或者“--”,需要先把原来的文件内容记录下之后,进行清空,再进行写入,另外需要注意的是r+和a+都是可写可读,不过a+是从文件末 ...