@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";
    }
}

参考 RequestBody的使用

Spring 处理请求和响应相关的注解的更多相关文章

  1. spring基础---->请求与响应的参数(一)

    这里面我们主要介绍一下spring中关于请求和响应参数数据的问题.爱,从来就是一件千回百转的事.不曾被离弃,不曾受伤害,怎懂得爱人?爱,原来是一种经历. spring中的请求与响应 一.spring中 ...

  2. spring框架中三层架构相关的注解

    做了这么多年的C++,再去学Java,确实发现,语言都是相通的,即使是Java的那么多生态,理解起来也并不费劲 Spring 框架目前还在学习中,处于 Tourist 阶段,目前只求会做,不求原理,等 ...

  3. Spring_02 注入类型值、利用引用注入类型值、spring表达式、与类相关的注解、与依赖注入相关的注解、注解扫描

    注意:注入基本类型值在本质上就是依赖注入,而且是利用的set方式进行的依赖注入 1 注入基本类型的值 <property name="基本类型的成员变量名" value=&q ...

  4. tornado的请求与响应

    tornado请求与响应相关 一.配置文件config.py 中的settings 有哪些配置: debug:设置tornado是否工作再调试模式下,默认为false 即工作再生产模式下 true的特 ...

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

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

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

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

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

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

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

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

  9. Spring Cloud Gateway修改请求和响应body的内容

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

随机推荐

  1. Flask + Nginx + uwsgi 部署过程

    一.安装Flask 1.itsdangerous tar xvf itsdangerous-0.23.tar.gz cd itsdangerous-0.23/ python setup.py inst ...

  2. oracle 存储过程及REF CURSOR的使用

    基本使用方法及示例 1.基本结构: CREATE OR REPLACE PROCEDURE 存储过程名字 (参数1 IN NUMBER,参数2 IN NUMBER) AS 变量1 INTEGER := ...

  3. 【编程思想】【设计模式】【创建模式creational 】工厂模式factory_method

    Python版 https://github.com/faif/python-patterns/blob/master/creational/factory_method.py #!/usr/bin/ ...

  4. Apifox(2)快速上手apifox

    快速上手 使用场景 Apifox 是接口管理.开发.测试全流程集成工具,使用受众为整个研发技术团队,主要使用者为前端开发.后端开发和测试人员. 前端开发 接口文档管理 接口数据 Mock 接口调试 前 ...

  5. 我的第一篇博客blog,笑哭

    我的第一篇博客blog Markdown学习 一级标题:#加一个空格 加 文字, 二级标题:加2个##以此类推 字体 粗体:hello world!字体前有二个星号,字体后有二个星号 斜体:hello ...

  6. Tableau如何绘制凹凸图

    一.把订单日期拖拽至列,把销售额拖拽至行,类别拖拽至标记,并把订单日期拖拽至筛选器选择2017年 二.创建计算字段销售排名 三.将刚刚创建的销售排名拖拽至行,计算依据-类别 四.销量排名拖拽成两个,图 ...

  7. android 基于dex的插件化开发

    安卓里边可以用DexClassLoader实现动态加载dex文件,通过访问dex文件访问dex中封装的方法,如果dex文件本身还调用了native方法,也就间接实现了runtime调用native方法 ...

  8. java 输入输出IO流:标准输入/输出System.in;System.out;System.err;【重定向输入System.setIn(FileinputStream);输出System.setOut(printStream);】

    Java的标准输入输出分别通过System.in和System.out来代表的,在默认情况下它分别代表键盘和显示器,当程序通过System.in来获取输入时,实际上是从键盘读取输入 当程序试图通过 S ...

  9. 动态导入模块__import__("str") importlib标准库

    解释器内部使用的为__import__('str') #!/usr/bin/env python # Author:Zhangmingda print('我是aa类 ') #被import的时候就执行 ...

  10. X-Tim开发日志

    1.X-Tim--------一个极客风的手表 引言 很久之前就看到FASTSHIFT,但是水平太差,可是又想做一个这样的手表,于是在学习了FASTSHIFT的页面管理之后,也开始了X-Tim的制作. ...