Springboot——Controller层开发、请求与响应、RESTful开发规范

news2025/2/28 11:21:27

目录

一、入门案例(小了解,没啥用)

1.1 创建Springboot工程

1.2 导入maven坐标

1.3 controller层代码

1.4 postman测试

二、 REST常用注解

 2.1 @Controller     

 2.2  @RequestMapping(请求映射路径)

 2.3  @ResponseBody

 2.4 @ComponentScan

 2.5  @RequestParam

 2.6 @RequestBody

 2.7 @RequestBody、@RequestParam、@PathVariable区别

 2.8 @DateTimeFormat

 2.9  @PathVariable

 2.10 @RestController

 2.11 @PostMapping

三、请求与响应

  3.1 请求方式

     3.1.1 Get请求普通参数传递

     3.1.2 Post请求普通参数传递

四、请求参数(了解,以后常用的是传JSON)

 4.1 普通参数(不同名称的映射)

 4.2 POJO类型参数

 4.3 嵌套POJO类型参数

 4.4 数组类型参数

 4.5 集合类型参数

五、请求与响应(重要,传送JSON数据)

5.1 JSON请求参数

 5.1.1 JSON数据

5.1.2  JSON对象(POJO)

5.1.3 JSON对象(POJO集合参数)

 5.2 日期型参数传递

 5.3 响应

5.3.1 响应页面(用的很少,几乎不用)

5.3.2  响应文本数据

 5.3.3 响应JSON数据

六、REST风格

6.1 RESTful 快速开发(简化)


 

一、入门案例(小了解,没啥用)

 1.1 创建Springboot工程

1.2 导入maven坐标

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

1.3 controller层代码


@Controller //成功spring的bean  我们这里不使用@Component
            //@Controller  这是SpringMVC声明bean的专门注解
public class UserController {


    /**
     * 提供给外部,处理请求的操作
     * @return
     */
    @RequestMapping("/save")   //设置当前操作的访问路径
    @ResponseBody                // 因为我们要返回一个JSON数据或者说是一个字符串,我们要再加一个ResponseBody注解
                                 //简单的说就是把我们要响应的东西作为一个整体内容返回到前端
    public String save(){
        System.out.println("user save...");
//      我们选择return一个JSON数据
        return "{'module':'springboot'}";
    }


}

 1.4 postman测试

    当然这个时候post也可以

二、 REST常用注解

    springboot中常用注解在下面这篇博客当中有一部分

Springboot中常用注解的使用语境、方法以及常用的maven坐标_我爱布朗熊的博客-CSDN博客_lombok maven坐标

    2.1 @Controller     

       类型:类注解

       作用:设定spring的核心控制器

@Controller //成功spring的bean  我们这里不使用@Component
            //@Controller  这是SpringMVC声明bean的专门注解
public class UserController {
}

    2.2  @RequestMapping(请求映射路径)

         类型:方法注解、类注解

         作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀

    @RequestMapping("/save")   //设置当前操作的访问路径
    public void save(){
        System.out.println("user save...");

    }

       

 

     当然这个注解也可以放到类上面,表示这个类中的方法请求路径的前缀,一般来说一个类的请求前缀都是一个样的,所以我们就没有必要在每个方法中都重复写相同的路径,我们把这一部分相同的路径提取出来放到类上面,这样就方便了我们以后的编码,也更好的将代码业务进行分类,避免出现同一个路径对应多个方法的错误形式

@Controller //成功spring的bean  我们这里不使用@Component
            //@Controller  这是SpringMVC声明bean的专门注解
@RequestMapping("/save")   //设置当前层的请求前缀
public class UserController {
}

     2.3  @ResponseBody

         类型:方法注解

         作用:设置当前控制器方法响应内容为当前返回值,无需解析

    /**
     * 提供给外部,处理请求的操作
     * @return
     */
    @RequestMapping("/save")   //设置当前操作的访问路径
    @ResponseBody                // 因为我们要返回一个JSON数据或者说是一个字符串,我们要再加一个ResponseBody注解
                                 //简单的说就是把我们要响应的东西作为一个整体内容返回到前端
    public String save(){
        System.out.println("user save...");
//      我们选择return一个JSON数据
        return "{'module':'springboot'}";
    }

  2.4 @ComponentScan

    

 2.5  @RequestParam

   作用:当请求参数与形参变量名不同,使用@RequestParam绑定参数关系

 

还有两个参数

  •  required:是否为必传参数
  •  defaultValue:参数默认值

2.6 @RequestBody

 

2.7 @RequestBody、@RequestParam、@PathVariable区别

 

2.8 @DateTimeFormat

内部有个Converter接口,就是将传递的参数和收集的参数的类型进行转换的

 

 

 

 2.9  @PathVariable

 

 

 2.10 @RestController

   @RestController == @ResponseBody+@Controller

 2.11 @PostMapping

  @PostMapping ==@RequestMapping( method = RequestMethod.POST )

三、请求与响应

   3.1 请求方式

      3.1.1 Get请求普通参数传递

    /**
     * 提供给外部,处理请求的操作
     * @return
     */
    @RequestMapping("/commonParam")   //设置当前操作的访问路径
    @ResponseBody                // 因为我们要返回一个JSON数据或者说是一个字符串,我们要再加一个ResponseBody注解
                                 //简单的说就是把我们要响应的东西作为一个整体内容返回到前端
    public String save(String name){
        System.out.println("普通参数传递 name="+name);
//      我们选择return一个JSON数据
        return "{'module':'springboot'}";
    }

  

传递多个参数呢?

    /**
     * 提供给外部,处理请求的操作
     * @return
     */
    @RequestMapping("/commonParam")   //设置当前操作的访问路径
    @ResponseBody                // 因为我们要返回一个JSON数据或者说是一个字符串,我们要再加一个ResponseBody注解
                                 //简单的说就是把我们要响应的东西作为一个整体内容返回到前端
    public String save(String name,String age){
        System.out.println("普通参数传递 name="+name);
        System.out.println("普通参数传递 age="+age);
//      我们选择return一个JSON数据
        return "{'module':'springboot'}";
    }

 

 

     3.1.2 Post请求普通参数传递

   我们可以看下图的变化,我们选择了POST,然后路径中不再有各种Params

   对于请求体编辑参数的位置我们是选择form-data还是x-www-form-urlencoded?

 

 

四、请求参数(了解,以后常用的是传JSON)

  参数种类:

  • 普通参数
  • POJO类型参数
  • 嵌套POJO类型参数
  • 数组类型参数
  • 集合类型参数

 4.1 普通参数(不同名称的映射)

我们还是看看刚刚的get请求

现在我们修改一个地方,将发送请求时携带的params的参数名和后端接收的参数名不一致

    @RequestMapping("/commonParam")      //设置当前操作的访问路径
    @ResponseBody                          // 因为我们要返回一个JSON数据或者说是一个字符串,我们要再加一个ResponseBody注解
                                           //简单的说就是把我们要响应的东西作为一个整体内容返回到前端
    public String save(@RequestParam("name") String username, String age){
        System.out.println("普通参数传递 name="+username);
        System.out.println("普通参数传递 age="+age);
//      我们选择return一个JSON数据
        return "{'module':'springboot'}";
    }

 

 

 4.2 POJO类型参数


    @RequestMapping("/pojoParam")
    @ResponseBody
    public String pojoParam(User user){
        System.out.println("普通参数传递 user="+user);

//      我们选择return一个JSON数据
        return "{'module':'pojo param'}";
    }

 

 

 4.3 嵌套POJO类型参数

public class User {
    private String name;
    private int age;
    private Address address;
}

 

 

4.4 数组类型参数

    @RequestMapping("/arrayParam")
    @ResponseBody
    public String arrayParam(String[] likes){
        System.out.println("数组传参 like="+ Arrays.toString(likes));

//      我们选择return一个JSON数据
        return "{'module':'arrays'}";
    }

 

 

4.5 集合类型参数

    @RequestMapping("/listParam")
    @ResponseBody
    public String listParam(@RequestParam List<String> likes){
        System.out.println("集合参数传递 like="+ likes);

//      我们选择return一个JSON数据
        return "{'module':'list param'}";
    }

 

 

五、请求与响应(重要,传送JSON数据)

5.1 JSON请求参数

  分类:

  •   JSON数据
  •   JSON对象(POJO)
  •   JSON数据(POJO)

 5.1.1 JSON数据

    @RequestMapping("/listParamJson")
    @ResponseBody
    public String listParamJson(@RequestBody List<String> likes){
        System.out.println("集合参数传递 like="+ likes);

//      我们选择return一个JSON数据
        return "{'module':'list param json'}";
    }

 

5.1.2  JSON对象(POJO)

 

 

5.1.3 JSON对象(POJO集合参数)

 

 5.2 日期型参数传递

   日期类型数据基于系统不同,格式也不尽相同

日期型的参数,可以直接由一个字符串转换成data


    @RequestMapping("/dataParam")
    @ResponseBody
    public String dataParam(Date date){
        System.out.println("集合参数传递 date="+ date);

//      我们选择return一个JSON数据
        return "{'module':'date '}";
    }

 

 

 

但是当我们传递日期参数使用中行线的形式时,就会报错,就是下图中的date1形式,这怎么呢?

 

 将代码修改为下面这个样子就可以了

    @RequestMapping("/dateParam")
    @ResponseBody
    public String dateParam(Date date, @DateTimeFormat(pattern = "yyyy-MM-dd") Date date1){
        System.out.println("集合参数传递 date="+ date);
        System.out.println("集合参数传递 date="+ date1);

//      我们选择return一个JSON数据
        return "{'module':'date '}";
    }

 

 

5.3 响应

   简单来说,将我们的处理结果返回给我们的用户(也可以说是前端,前端接收到页面后再渲染页面)

  •    响应页面
  •    响应数据 (文本数据、JSON数据)

5.3.1 响应页面(用的很少,几乎不用)

 响应页面非常的简单,将页面名称当做字符串返回

 

 

5.3.2  响应文本数据

 

 

 5.3.3 响应JSON数据

 

 

 

 

六、REST风格

REST :表现形式状态转换

 

优点:

           隐藏资源的访问行为,无法通过地址得知资源是何种操作

           书写简化

 

6.1 RESTful 快速开发(简化)

  这是之前的代码

 

  现在的代码(很清晰)

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/39050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习基础笔记十三——函数

1、函数的定义&#xff1a; 函数是一段具有特定功能的、可重用的语句组。 说明&#xff1a;过程语言&#xff0c;程序员是按照顺序一行一行的编写代码&#xff0c;然后是顺序执行&#xff0c;很容易出现大量重复的代码行&#xff0c;那么有人就考虑将相同的代码提取出来&…

Mybatis源码解析(六):查询数据库主流程

Mybatis源码系列文章 手写源码&#xff08;了解源码整体流程及重要组件&#xff09; Mybatis源码解析(一)&#xff1a;环境搭建 Mybatis源码解析(二)&#xff1a;全局配置文件的解析 Mybatis源码解析(三)&#xff1a;映射配置文件的解析 Mybatis源码解析(四)&#xff1a;s…

.NET 6 支持Cookie与JWT混合认证、授权的方法

从.NET 5开始&#xff0c;.Net Core 与.NET Fremework 合并成了 .NET 5&#xff0c;所以标题也很让人尴尬&#xff0c;不知道该写成是.NET Core还是.NET X。因为这个方法支持.NET 5、6、7。 目录前言Cookie 认证JWT认证总结前言 不知道大家有没有过这样的需求&#xff0c;为了…

基于matlab的异步(感应)电机直接转矩控制系统

目 录 摘要 I 第1章 绪论 1 1.1 课题研究背景 1 1.2直接转矩控制技术的发展现状 1 1.2.1直接转矩控制的现状及发展趋势 1 1.2.2目前的热点研究问题及解决方法 2 1.3本文研究的主要内容 3 第2章 直接转矩控制系统理论 4 2.1概述 4 2.2 异步电动机的数学模型 4 2.3 逆变器的数学模…

【机器学习项目实战10例】(三):基于K近邻的葡萄酒质量检测项目

💥 项目专栏:【机器学习项目实战10例】 文章目录 一、基于K近邻的葡萄酒质量检测项目二、数据集介绍三、导包四、读取数据五、绘制空间分布六、划分训练集、测试集七、构建K近邻模型八、绘制聚类效果九、网格搜索一、基于K近邻的葡萄酒质量检测项目 葡萄酒数据集是一个经典…

[附源码]SSM计算机毕业设计实验教学过程管理平台JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Ajax复习(62nd)

1、 Ajax 基础 1.1 传统网站中存在的问题 1、网速慢的情况下&#xff0c;页面加载时间长&#xff0c;用户只能等待 2、表单提交后&#xff0c;如果一项内容不合格&#xff0c;需要重新填写所有表单内容 3、页面跳转&#xff0c;重新加载页面&#xff0c;造成资源浪费&#xf…

基于matlab的BOC调制信号捕获仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 随着全球导航卫星系统的高速发展,导航系统的数量也越来越多,比如使用最广泛的GPS导航系统,以及越来越备受关注的中国北斗导航系统等.因此导航频段变得越来越拥挤,且各个频段内的信号相互…

activiti-api-impl

activiti-api-impl目录概述需求&#xff1a;设计思路实现思路分析1.CommonModelAutoConfiguration2.RuntimeEventImpl3.ProcessModelAutoConfiguration4.DefaultServiceTaskBehavior5.APIVariableInstanceConverterTaskModelAutoConfiguration参考资料和推荐阅读Survive by day…

Flutter高仿微信-第53篇-群聊-删除并退出

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; //删除并退出对话框 void _deleteAndExistDialog(){Load…

图解LeetCode——1752. 检查数组是否经排序和轮转得到(难度:简单)

一、题目 给你一个数组 nums 。nums 的源数组中&#xff0c;所有元素与 nums 相同&#xff0c;但按非递减顺序排列。 如果 nums 能够由源数组轮转若干位置&#xff08;包括 0 个位置&#xff09;得到&#xff0c;则返回 true &#xff1b;否则&#xff0c;返回 false 。 源数…

一文了解Linux上TCP的几个内核参数调优

Linux作为一个强大的操作系统&#xff0c;提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中&#xff0c;笔者积累了一些在内网环境应该进行调优的参数。在此分享出来&#xff0c;希望对大家有所帮助。 调优清单 好了&#xff0…

Java#27(Arrays)

目录 一.Arrays 操作数组的工具类 二.Lambda表达式 1.注意: 2.省略规则 一.Arrays 操作数组的工具类 方法名 作用 public static String toString(数组) 把数组拼接…

大数据毕设选题 - 深度学习动物识别与检测系统( python opencv)

文章目录0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层4 数据集准备4.1 数据标注简介4.2 数据保存5 …

kafka集群搭建与prometheus监控配置

文章目录1、基于zookeeper的集群2、kafka集群安装2.1 基于Zookeeper集群的配置2.2 基于KRaft模式集群的配置2.3、启动Kafka集群3、kafka_exporter监控组件安装3.1、安装3.2、系统服务3.3、集成到prometheus4、与Grafana集成1、基于zookeeper的集群 下载地址&#xff1a;https:…

ABAP学习笔记之——第三章:OPEN SQL和NATIVE SQL

一、SAP R/3体系结构 SAP R/3一个分为三层&#xff1a;数据库层、应用层、表示层。其中应用层和数据库层由一个系统构成。 表示层&#xff1a;表示层(Presentation Layer)简单来讲其实就是指个人PC&#xff0c;是保存构成SAPGUI(GraphicalUserInterface)的软件组件(Software Co…

数字验证学习笔记——SystemVerilog芯片验证10 ——类的成员

一、类和成员 类是成员变量和成员方法的载体&#xff0c;之所以称为自洽体&#xff0c;是因为其变量和方法应符合‘聚拢’原则&#xff0c;即一个类的功能应该尽可能简单&#xff0c;不应承担过多的职责&#xff0c;更不应该承担不符合它的职责&#xff0c;这在设计模式被称为…

变分自编码器(VAES)

Dimensionality reduction ,PCA and autoencoders Dimensionality reduction 我们清楚&#xff0c;数据降维其实都是减少数据的特征数量&#xff0c;如果把encoderencoderencoder看作是由高维原有特征生成低维新特征的过程。把decoderdecoderdecoder看作是将低维特征还原为高…

vulnhub靶机ha:wordy

靶机下载链接&#xff1a;HA: Wordy ~ VulnHub 靶机ip&#xff1a;192.168.174.136&#xff08;后面重启后变成192.168.174.137&#xff09; kali ip&#xff1a;192.168.174.128 目录 靶机ip发现: 靶机端口扫描: 子目录扫描&#xff1a; wpscan扫描 漏洞利用1 漏洞利…

ASEMI肖特基二极管MBR40200PT参数,MBR40200PT规格

编辑-Z ASEMI肖特基二极管MBR40200PT参数&#xff1a; 型号&#xff1a;MBR40200PT 最大重复峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;200V 最大平均正向整流输出电流&#xff08;IF&#xff09;&#xff1a;40A 峰值正向浪涌电流&#xff08;IFSM&#xff0…