@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. References in C++

    When a variable is declared as reference, it becomes an alternative name for an existing variable. A ...

  2. shell脚本统计多个CPU利用率

    本节主要内容:top命令统计CPU的利用率 一,问题分析 MySQL在Linux下是多线程的,而且只能将多个线程分布到一个CPU上.因此,使用小型服务器,或者PC SERVER,多个CPU利用率并不高 ...

  3. mybatis分页插件PageHelper源码浅析

    PageHelper 是Mybaties中的一个分页插件.其maven坐标 <!-- https://mvnrepository.com/artifact/com.github.pagehelp ...

  4. 【Python机器学习实战】聚类算法(2)——层次聚类(HAC)和DBSCAN

    层次聚类和DBSCAN 前面说到K-means聚类算法,K-Means聚类是一种分散性聚类算法,本节主要是基于数据结构的聚类算法--层次聚类和基于密度的聚类算法--DBSCAN两种算法. 1.层次聚类 ...

  5. CF46B T-shirts from Sponsor 题解

    Content 有一家服装店,有 \(\texttt{S}\) 码的衣服 \(n_S\) 件.\(\texttt{M}\) 码的衣服 \(n_M\) 件,\(\texttt{L}\) 码的衣服 \(n ...

  6. CF1547B Alphabetical Strings 题解

    Content 我们有一个空的字符串,第 \(i\) 次操作我们可以将字母表中第 \(i\) 个字母加入字符串的最前面或最后面.我们称一个长度为 \(n\) 的字符串是合法的,当且仅当这个字符串可以通 ...

  7. Java 数据类型:集合接口Collection之Set接口HashSet类;LinkedHashSet;TreeSet 类

    Collection 之 Set 实现类: HashSet TreeSet 特点: 无序. 元素不可重复. (如果试图添加一个已经有的元素到一个Set集合中,那么会添失败,add()方法返回false ...

  8. NAT各种模式

    https://blog.csdn.net/u011245325/article/details/9294229

  9. ApacheShiro反序列化远程代码执行 漏洞处理

    Shiro对rememberMe的cookie做了加密处理,shiro在CookieRememberMeManaer类中将cookierememberMe字段内容分别进行序列化.AES加密.Base6 ...

  10. SpringBoot整合quartz实现动态启动,停止定时任务功能

    注意:这个方法当程序重启之后会失效,所以必须将定时任务持久化到数据库,然后程序启动的时候重新把数据库的定时任务加载到quartz中 springboot程序启动初始化代码参考:https://www. ...