Spring 处理请求和响应相关的注解
@Controller
默认返回 templates 目录下的 string.html 页面内容。
在方法中加上 @ResponseBody 注解,可以返回JSON、XML或自定义mediaType的内容
@RestController
直接返回内容,会自动将对象实体转换为JSON格式,视图解析器 InternalResourceViewResolver 不起作用。
@RestController = @Controller + @ResponseBody
@RequestBody
接收请求体中的 JSON 数据,通过实体类的setter方法赋值给属性。
json 的 "" => 实体 String 为 ""
json 的 "" => 实体 Integer、Double 为 null
json 的 null => 实体为 null
@RequestBody 可以与 @RequestParam() 同时使用,@RequestBody 最多只能有一个,@RequestParam() 可以有多个。
以 String 接收数据
@RequestMapping("/index")
public String indexMapping(@RequestBody String jsonStr) {
return jsonStr;
}
以对象实体接收数据
// {"name":"hanmeimei","age":12}
@RequestMapping("/index")
public String indexMapping(@RequestBody User user) {
return user.toString();
}
以复杂的对象实体接收数据
public class Team {
private Integer id;
private String name;
private List<String> honors;
private List<User> members;
}
// {
// "id": 1,
// "name": "good",
// "honors": ["very good", "very fast"],
// "members": [{"name":"hanmeimei","age":12},
// {"name":"lilei","age":13}],
// }
@RequestMapping("/index")
public String indexMapping(@RequestBody Team team) {
return team.toString();
}
@ResponseBody
将对象实体转换为JSON、XML或自定义mediaType的内容,并在 HTTP response body 中返回
@RequestMapping
将请求映射到控制器上,可以在控制器类和/或方法上使用。
处理单个请求
@RequestMapping("/home")
public class IndexController {
@RequestMapping("/index")
String indexMapping() {
return "Hello from index mapping.";
}
}
处理多个请求
@RequestMapping("/home")
public class IndexController {
@RequestMapping(value = {
"/",
"/index",
"/index/*.html",
"/index/**/*.html"
})
String indexMultipleMapping() {
return "Hello from index multiple mapping.";
}
}
处理请求类型
默认是 HTTP GET 类型的。
@RequestMapping(value = "/home", method = RequestMethod.GET)
String get() {}
@RequestMapping(value = "/home", method = RequestMethod.DELETE)
String delete() {}
@RequestMapping(value = "/home", method = RequestMethod.POST)
String post() {}
@RequestMapping(value = "/home", method = RequestMethod.PUT)
String put() {}
@RequestMapping(value = "/home", method = RequestMethod.PATCH)
String patch() {}
处理请求类型快捷方式
@GetMapping(value = "/home")
String get() {}
@DeleteMapping(value = "/home")
String delete() {}
@PostMapping(value = "/home")
String post() {}
@PutMapping(value = "/home")
String put() {}
@PatchMapping(value = "/home")
String patch() {}
处理生产和消费对象
public class IndexController {
// 生产 application/JSON 响应
@RequestMapping(value = "/prod", produces = {
"application/JSON"
})
@ResponseBody
String getProduces() {
return "Produces attribute";
}
// 消费 application/JSON & application/XML 请求
@RequestMapping(value = "/cons", consumes = {
"application/JSON",
"application/XML"
})
@ResponseBody
String getConsumes() {
return "Consumes attribute";
}
}
处理消息头
public class IndexController {
// 处理 Content-Type=application/json 的请求
@RequestMapping(value = "/head", headers = {
"Content-Type=application/json"
})
String head() {
return "Mapping applied along with headers";
}
}
public class IndexController {
@RequestMapping(value = "/head", headers = {
"Content-Type=text/plain",
"Content-Type=application/json"
})
String head() {
return "Mapping applied along with headers";
}
}
处理请求参数
public class IndexController {
@RequestMapping(value = "/fetch", params = {
"personId=10"
})
String getParams10(@RequestParam("personId") String id) {
return "Fetched parameter using params attribute = " + id;
}
@RequestMapping(value = "/fetch", params = {
"personId=20"
})
String getParams20(@RequestParam("personId") String id) {
return "Fetched parameter using params attribute = " + id;
}
}
处理动态 URI
public class IndexController {
@RequestMapping(value = "/fetch/{id}")
String getDynamicUriValue(@PathVariable String id) {
return "Dynamic URI parameter fetched";
}
@RequestMapping(value = "/fetch/{id:\d+}/{name}")
String getDynamicUriValueRegex(
@PathVariable("id") int id, @PathVariable("name") String name
) {
return "Dynamic URI parameter fetched using regex";
}
}
默认的处理方法
public class IndexController {
@RequestMapping()
String default () {
return "This is a default method for the class";
}
}
Spring 处理请求和响应相关的注解的更多相关文章
- spring基础---->请求与响应的参数(一)
这里面我们主要介绍一下spring中关于请求和响应参数数据的问题.爱,从来就是一件千回百转的事.不曾被离弃,不曾受伤害,怎懂得爱人?爱,原来是一种经历. spring中的请求与响应 一.spring中 ...
- spring框架中三层架构相关的注解
做了这么多年的C++,再去学Java,确实发现,语言都是相通的,即使是Java的那么多生态,理解起来也并不费劲 Spring 框架目前还在学习中,处于 Tourist 阶段,目前只求会做,不求原理,等 ...
- Spring_02 注入类型值、利用引用注入类型值、spring表达式、与类相关的注解、与依赖注入相关的注解、注解扫描
注意:注入基本类型值在本质上就是依赖注入,而且是利用的set方式进行的依赖注入 1 注入基本类型的值 <property name="基本类型的成员变量名" value=&q ...
- tornado的请求与响应
tornado请求与响应相关 一.配置文件config.py 中的settings 有哪些配置: debug:设置tornado是否工作再调试模式下,默认为false 即工作再生产模式下 true的特 ...
- Spring Boot 2.x基础教程:如何扩展XML格式的请求和响应
在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...
- Spring Boot使用AOP在控制台打印请求、响应信息
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等. AOP简介 AOP全称Aspect Oriented Programming,面向切面,AOP主要实现的 ...
- Spring Boot中如何扩展XML请求和响应的支持
在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...
- Spring Boot中扩展XML请求和响应的支持
在Spring Boot中,我们大多时候都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式返回一 ...
- Spring Cloud Gateway修改请求和响应body的内容
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- 网页设计单位 px,em,rem,vm,vh,%
px(pixels) 像素 (px) 是一种绝对单位,因为无论其他相关的设置怎么变化,像素指定的值是不会变化的. px就是设备或者图片最小的一个点,比如常常听到的电脑像素是1024x768的,表示的是 ...
- 登录界面.jsp
<!DOCTYPE html><html lang="zh-CN"> <head> <meta charset="utf-8&q ...
- 【MySQL】亲测可用的教程筛选:安装与卸载
windows版本的 安装看这篇,非常详细:https://www.cnblogs.com/winton-nfs/p/11524007.html 彻底清除:https://www.pianshen.c ...
- 【C/C++】vector 动态二维数组
声明 vector<vector<int> vec; //赋值思路可以从这个很基础的操作里看出来 vector<int> a; a.push_back(1); a.pus ...
- collection库更新1.4.0版本
collection库更新1.4.0版本 collection库一直在使用中,周末集合github上的反馈以及contributor的修改,更新了1.4.0版本. 这个版本做了几个事情: 增加了三种类 ...
- Java动态脚本Groovy,高级啊!
前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 简介: Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚 ...
- 【dva】model中effects函数的解析
结构 effects: { *pageQuery({ payload = {} }, { select, call, put }) { const res = yield call(pageQuery ...
- 关于Marshal 类的整理
在两个不同的实体(两个线程或者进程甚至机器.在Managed和Unmanaged之间)进行方法调用和参数传递的时候,具体的调用方法和参数的内存格式可能需要一定的转换,这个转换的过程叫做Marshal. ...
- 【LeetCode】350. Intersection of Two Arrays II 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 Java排序+双指针 Python排序+双指针 Python解 ...
- 【LeetCode】414. Third Maximum Number 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 替换最大值数组 使用set 三个变量 日期 题目地址 ...