【springboot】@RequestBody和@ResponseBody以及@PathVariable的使用及区别

本文主要是介绍【springboot】@RequestBody和@ResponseBody以及@PathVariable的使用及区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、@RequestBody@ResponseBody

@RequestBody (通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。实质上接受的是一个JSON的字符串)

   1) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;

   2) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

使用时机:

A) GET、POST方式提时, 根据request header Content-Type的值来判断:

    application/x-www-form-urlencoded,可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);

    multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);

其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);

@ResponseBody

Controller层为控制视图层,当网页端一个请求发送到后台时,后台的控制视图层通过@RequestMapping映射相应的视图方法,如果在视图方法上用注解@ResponseBody标识后,方法执行完后返回的内容会返回到请求页面的body上,直接显示在网页上。示例如下

1、spring boot的启动类

@SpringBootApplication

public class App {

    public static void main(String[] args) {

        SpringApplication app = new SpringApplication(App.class);

        ConfigurableApplicationContext context = app.run(args);

    }

}

2、spring boot的控制视图层

@Controller

public class MyController {

    /*响应http://127.0.0.1:8080/hello请求*/

    @RequestMapping("/hello")

    @ResponseBody

    public String hello(){

        return "hello world";

    }

}

当启动启动类后,在浏览器中输入http://127.0.0.1:8080/hello时,控制视图层响应请求后,把“hello world”字符串返回到请求页面上。@ResponseBody注解的作用就是把控制视图方法返回的内容返回到请求页面上。

查看请求后页面的http://127.0.0.1:8080/hello源码

 

注意,请求前后的url不改变。通过请求后的页面可知,@ResponseBody注解把返回的字符串“hello world”放到了请求返回页面的<body></body> 标签中了。

 

2、@PathVariable注解的使用

XXXController包括了常用的Get、Post、Put、Delete请求,并使用注解的方式说明了请求路径

路径中的{id}元素是路径参数,可以通过@PathVariable注解获取,具体的参数获取与校验会在下一篇做介绍

 

总结

SpringBoot提供的获取参数注解包括:@PathVariable,@RequestParam,@RequestBody,三者的区别如下表:

 

1.Get请求的参数可以通过@PathVariable和@RequestParam获取

@GetMapping("/orders/{id}")

    public String getOrder(@PathVariable(value = "id")Integer id,                    

                                        @RequestParam(value = "name")String name,                          

                                        @RequestParam(value = "price",required = false,defaultValue = "0") Integer price)

 

2.Post使用@RequestBody注解将Json格式的参数自动绑定到Entity类

@PostMapping("/order/check")

public String checkOrder(@RequestBody Order order)

 

3.Post使用@RequestParam获取请求体中非Json格式的数据

@PostMapping("/order/checkmore")

public String checkMore(@RequestParam(value = "amount")Integer amount,

                                        @RequestParam(value = "discount")float discount)

 

4.Post请求也可以直接与对象类绑定,但需要参数名一致,不支持json格式,只支持form-data和x-www.form-urlencoded格式

@PostMapping("/order/add")

public String addOrder(Order order)

 

5.Put请求可以直接与对象类绑定,但需要参数名一致

 @PutMapping("/order/{id}/update")   

 public String updateOrder(@PathVariable(value = "id")Integer id,Order order)

 

注意点:

1.针对一些非必填的参数,可以使用required关键字来标识,同时必须设置默认值defaultValue,如getOrder方法中对price参数的获取:

(@RequestParam(value = "price",required = false,defaultValue = "0") Integer price)

 

2.参数可以直接与Entity类绑定,但不支持json格式,只支持form-data和x-www.form-urlencoded格式

@PostMapping("/order/add")

public String addOrder(Order order){

 

4.增删改查请求参数规范@PostMapping;@GetMapping;@PutMapping;@DeleteMapping

 

  * 通过RestController注解告知SpringBoot这是一个控制器类

  * 通过RequestMapping注解说明统一处理以user开头的URL请求

  */

 @RestController

 @RequestMapping("/user")

 public class UserController {

 

     /**

      * 获取特定用户

      * @param id

      * @return

      */

     @GetMapping("/users/{id}")

     public User getUser(@PathVariable(value="id") Integer id){

        return null;

     }

 

     /**

      * 添加用户

      * @param user

      * @return

      */

     @PostMapping("/add")

     public String addUser(@RequestBody User user){

         return "添加成功";

     }

 

     /**

      * 修改用户

      * @param id

      * @param user

     * @return

     */

@PutMapping("/users/{id}/update")

 

     public String updateUser(@PathVariable(value="id") Integer id,@RequestBody User user){

         return "修改成功";

     }

 

     /**

      * 删除用户

      * @param id

      * @return

      */

     @DeleteMapping("/users/{id}/delete")

     public String deleteUser(@PathVariable(value="id") Integer id){

 

         return "删除成功";

     }

 }

这篇关于【springboot】@RequestBody和@ResponseBody以及@PathVariable的使用及区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105354

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再