@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"})@ResponseBodyString getProduces() {return "Produces attribute";}// 消费 application/JSON & application/XML 请求@RequestMapping(value = "/cons", consumes = {"application/JSON","application/XML"})@ResponseBodyString 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";}
}

参考 RequestBody的使用

Spring 处理请求和响应相关的注解相关推荐

  1. Android中使用logger打印完整的okhttp网络请求和响应的所有相关信息(请求行、请求头、请求体、响应行、响应行、响应头、响应体)

    如果你的项目中的网络请求库是Retrofit的话,他的底层封装的是OkHttp,通常调试网络接口时都会将网络请求和响应相关数据通过日志的形式打印出来.OkHttp也提供了一个网络拦截器okhttp-l ...

  2. Spring Boot 2.x基础教程:如何扩展XML格式的请求和响应

    在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...

  3. Spring Boot中如何扩展XML请求和响应的支持

    在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...

  4. Spring Cloud Gateway-ServerWebExchange核心方法与请求或者响应内容的修改

    Spring Cloud Gateway-ServerWebExchange核心方法与请求或者响应内容的修改 前提 本文编写的时候使用的Spring Cloud Gateway版本为当时最新的版本Gr ...

  5. Spring Boot中扩展XML请求和响应的支持

    在Spring Boot中,我们大多时候都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式返回一 ...

  6. Spring Boot使用AOP在控制台打印请求、响应信息

    AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等. AOP简介 AOP全称Aspect Oriented Programming,面向切面,AOP主要实现的 ...

  7. Spring AOP 面向切面编程相关注解

    Aspect Oriented Programming 面向切面编程 在Spring中使用这些面向切面相关的注解可以结合使用aspectJ,aspectJ是专门搞动态代理技术的,所以比较专业. 需要在 ...

  8. 基于Spring AOP的统一响应体的实现(注解版)

    基于Spring AOP的统一响应体的实现(注解版) 一.前言 在上一篇系列中 我们 统一参数校验,统一结果响应,统一异常处理,统一错误处理,统一日志记录,统一生成api文档, 对于统一数据响应返回规 ...

  9. 【JavaLearn】#(23)JSP相关语法、HTTP协议、Servlet介绍、Servlet生命周期、请求和响应、相对路径、转发和重定向

    1. JSP简单内容 1.1 JavaEE JavaEE 包含JSP JavaEE是一个开发分布式企业级应用的规范和标准.JavaEE包含之前学过的所有内容(JavaSE) 真正开发中,很少使用Jav ...

最新文章

  1. R语言gganimate包创建可视化gif动图:ggplot2可视化静态条形图(bar plot)、gganimate包创建动态条形图(bar plot)动画、基于transition_time函数
  2. linux系统负载状态检查脚本
  3. python 矩阵点乘_python相乘矩阵
  4. SQL syntax-log2
  5. 全球及中国低温纳米定位器行业发展趋势分析与风险评估报告2021-2027年版
  6. 数据库连接池为什么要用threadlocal呢?(不用会怎样?)
  7. [数据结构-严蔚敏版]P48栈的链式表示
  8. 带有AngularJS资源的Spring Rest Controller
  9. C#LeetCode刷题之#661-图片平滑器( Image Smoother)
  10. python十进制转换_Python方法如何将普通IP转换为十进制IP
  11. 计算机二级只有前十套简单,计算机二级Access上机十套试题详细解析(经典版).
  12. Mac OS X 编译Android内核源代码
  13. Windows 10不能安装mini版迅雷的解决方法
  14. Python正则表达式快速入门
  15. Ruby / Rails代码气味基础01
  16. GROMOS力场文件解读手册第5章阅读笔记I
  17. Drools7中的万能函数accumulate
  18. 电阻(5)NTC电阻篇
  19. Kindeditor 图片粘贴上传后设置图片属性
  20. floorplan 和 place的区别

热门文章

  1. Magento获取产品自定义属性及对应的值
  2. Typora如何插入公式
  3. Linux远程管理协议(RFB、RDP、Telnet和SSH)
  4. Ubuntu 下配置lamp环境
  5. 【C++基础学习】关于C++静态数据成员
  6. 华中科大10年计算机考研复试机试
  7. 吃货联盟 项目日记 0922
  8. django模板变量的使用详解 200309
  9. 办公自动化-表格的读写操作-xlrd-xlwt
  10. 为什么私有GIT服务器上无法查看上传的代码?