【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

相关文章

JDK8(Java Development kit)的安装与配置全过程

《JDK8(JavaDevelopmentkit)的安装与配置全过程》文章简要介绍了Java的核心特点(如跨平台、JVM机制)及JDK/JRE的区别,重点讲解了如何通过配置环境变量(PATH和JA... 目录Java特点JDKJREJDK的下载,安装配置环境变量总结Java特点说起 Java,大家肯定都

Spring定时任务之fixedRateString的实现示例

《Spring定时任务之fixedRateString的实现示例》本文主要介绍了Spring定时任务之fixedRateString的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录从毫秒到 Duration:为何要改变?核心:Java.time.Duration.parse

Java 中 Optional 的用法及最佳实践

《Java中Optional的用法及最佳实践》在Java开发中,空指针异常(NullPointerException)是开发者最常遇到的问题之一,本篇文章将详细讲解Optional的用法、常用方... 目录前言1. 什么是 Optional?主要特性:2. Optional 的基本用法2.1 创建 Opti

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

Spring Boot中获取IOC容器的多种方式

《SpringBoot中获取IOC容器的多种方式》本文主要介绍了SpringBoot中获取IOC容器的多种方式,包括直接注入、实现ApplicationContextAware接口、通过Spring... 目录1. 直接注入ApplicationContext2. 实现ApplicationContextA

详解Spring中REQUIRED事务的回滚机制详解

《详解Spring中REQUIRED事务的回滚机制详解》在Spring的事务管理中,REQUIRED是最常用也是默认的事务传播属性,本文就来详细的介绍一下Spring中REQUIRED事务的回滚机制,... 目录1. REQUIRED 的定义2. REQUIRED 下的回滚机制2.1 异常触发回滚2.2 回

Java 单元测试之Mockito 模拟静态方法与私有方法最佳实践

《Java单元测试之Mockito模拟静态方法与私有方法最佳实践》本文将深入探讨如何使用Mockito来模拟静态方法和私有方法,结合大量实战代码示例,带你突破传统单元测试的边界,写出更彻底、更独立... 目录Mockito 简介:为什么选择它?环境准备模拟静态方法:打破“不可变”的枷锁传统困境解法一:使用M

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3