L05_SpringBoot入门

news2025/6/24 23:15:44

SpringBoot入门

  • 浅谈Restful风格
  • 代码实现(并且通过Apifox进行接口测试[以传入json格式数据为例])
    • 首先创建一个SpringBoot项目,pom文件包引入如下
    • 下面在新建src创建com.ndky.controller包,然后再在包内创建一个HelloController类
    • 编写(一个简易的restful风格的代码)
      • 编写GET请求代码
      • apifox测试(请求的ip和port已设置在本地环境中)
      • api测试
      • 编写POST请求代码
      • api测试(json格式)
      • 编写PUT请求代码
      • 编写DELETE请求代码
  • 总结

浅谈Restful风格

Restful是一种设计风格。对于我们Web开发人员来说。就是使用一个url地址表示一个唯一的资源。然后把原来的请求参数加入到请求资源地址中。然后原来请求的增,删,改,查操作。改为使用HTTP协议中请求方式GET、POST、PUT、DELETE表示。

把请求参数加入到请求的资源地址中
原来的增,删,改,查。使用HTTP请求方式,POST、DELETE、PUT、GET分别一一对应。

GET请求对应查询
http://ip:port/工程名/book/1(http://ip:port/工程名/book)HTTP请求GET表示要查询id为1的图书(表示查询全部的图书)
POST请求对应添加
http://ip:port/工程名/bookHTTP请求POST表示要添加一个图书
PUT请求对应修改
http://ip:port/工程名/book/1HTTP请求PUT表示要修改id为1的图书信息
DELETE请求对应删除
http://ip:port/工程名/book/1HTTP请求DELETE表示要删除id为1的图书信息

原文链接:https://blog.csdn.net/weixin_51429303/article/details/114577031

代码实现(并且通过Apifox进行接口测试[以传入json格式数据为例])

首先创建一个SpringBoot项目,pom文件包引入如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ndky</groupId>
    <artifactId>HelloWorld</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>HelloWorld</name>
    <description>HelloWorld</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

下面在新建src创建com.ndky.controller包,然后再在包内创建一个HelloController类

在这里插入图片描述

编写(一个简易的restful风格的代码)

编写GET请求代码

请求data中所有数据,如果data为空就返回"Hello SpringBoot"字符串
@RequestMapping(“/hello”) 用于设置该controller中的所有请求的根请求路径为/hello

package com.ndky.helloworld.controller;

import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author LikeYouDo
 * @date 2023/10/12 15:17
 */

@RestController
@RequestMapping("/hello")
public class HelloController {

    List<Map<String, Object>> data = new ArrayList<>();

    /**
     * 获取所有数据
     *
     * @return
     */
    @GetMapping()
    public String getHello() {
        return data.isEmpty() ? "Hello SpringBoot" : "select data: " + data;
    }
}

apifox测试(请求的ip和port已设置在本地环境中)

未添加数据
在这里插入图片描述已添加数据
在这里插入图片描述

根据id查询数据,URI中带需要查询的id值

    /**
     * 根据id查询数据
     *
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public String getHelloById(@PathVariable("id") Integer id) {
        if (id != null) {
            for (Map<String, Object> datum : data) {
                if (datum.get("id").equals(id)) {
                    return datum.toString();
                }
            }
        }
        return "id不存在";
    }

api测试

id存在
在这里插入图片描述
id不存在
在这里插入图片描述

编写POST请求代码

添加数据,请求体中携带数据

    /**
     * 添加一个新的数据
     *
     * @param value
     * @return
     */
    @PostMapping()
    public String postHello(@RequestBody HashMap<String, Object> value) {
        data.add(value);
        return "add data: id=" + value.get("id") + ", name=" + value.get("name");
    }

api测试(json格式)

添加的数据

{
    "id": 1,
    "name": "王五"
}

在这里插入图片描述
通过get请求查询验证
在这里插入图片描述数据成功添加

编写PUT请求代码

URI中带需要查询的id值,请求中携带需要修改的数据,修改存入的id值对应的数据

    /**
     * 根据id修改name
     *
     * @param value
     * @return
     */
    @PutMapping("/{id}")
    public String putHello(@PathVariable Integer id, @RequestBody HashMap<String, Object> value) {
        if (value.get("name")==null){
            return "没有传入name值";
        }
        if (id != null) {
            for (Map<String, Object> datum : data) {
                if (datum.get("id").equals(id)) {
                    datum.replace("name", value.get("name"));
                    return "update data: id=" + datum.get("id") + ", name=" + datum.get("name");
                }
            }
        }
        return "id不存在";
    }

id存在
在这里插入图片描述验证是否成功
在这里插入图片描述id不存在或传入错误参数
在这里插入图片描述
在这里插入图片描述

编写DELETE请求代码

URI中带需要查询的id值,删除id对应的数据

    /**
     * 根据id删除数据
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public String deleteHello(@PathVariable Integer id) {
        Map<String, Object> tmp = null;
        if (id != null) {
            for (Map<String, Object> datum : data) {
                if (datum.get("id").equals(id)) {
                    tmp = datum;
                }
            }
        }
        if (tmp!=null){
            data.remove(tmp);
            return "delete data: id=" + id;
        }
        return "id不存在";
    }

id存在
在这里插入图片描述
验证
在这里插入图片描述

id不存在
在这里插入图片描述

总结

由上述代码可得,Resatful风格代码的关键在于URI地址可以相同,然后通过不同的请求方式来完成对应的CRUD操作,并且在完成相应的操作后需要进行查询操作,看看是否操作成功

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

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

相关文章

正则表达式基础语法

https://tool.oschina.net/regex 正则表达式&#xff1a;检查、匹配字符串的表达式 单个字符匹配&#xff1a; 有特殊含义的匹配&#xff1a; 多次重复匹配&#xff1a; 限定开头结尾的匹配&#xff1a; 贪婪模式&#xff1a;在满足条件的情况下&#xff0c;尽可能多匹配…

Python算法练习 10.12

leetcode 649 Dota2参议院 Dota2 的世界里有两个阵营&#xff1a;Radiant&#xff08;天辉&#xff09;和 Dire&#xff08;夜魇&#xff09; Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每…

MNIST字符识别(C++)

构建网络 采用官方示例的的lenet网络 训练 相关文件都已编译好&#xff0c;下载后执行命令即可 .\caffe-bin.exe train --solver .\lenet_solver.prototxt 识别 #include <caffe/caffe.hpp>#include <opencv2/core/core.hpp> #include <opencv2/highgui/hi…

炒现货白银的最佳时间

天时地利人和是我们进行现货白银投资最关键的因素。天时是指我们因时而动&#xff0c;在适合的时机出击。地利&#xff0c;就是我们对市场的定位&#xff0c;对自己入场的定位有清晰的了解&#xff0c;并且这些位置对我们有利。人和就是指投资者的状态很好&#xff0c;对如何进…

STM32MP157按键中断实验

按键配置 #include "key_it.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_gic.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_rcc.h"void key_it_config() {/* RCC使能GPIOF时钟 */RCC->MP_AHB4ENSE…

九章云极DataCanvas公司入选《AIGC产业链北京专精特新企业图谱》

近日&#xff0c;北京市经济和信息化局成功举办AIGC&#xff08;生成式人工智能&#xff09;产业链专精特新企业融通路演活动&#xff0c;并正式发布《AIGC产业链北京市专精特新企业图谱》&#xff08;下称《图谱》&#xff09;。九章云极DataCanvas公司凭借DataCanvas Alaya九…

Python- socket编程

Python中的socket模块为网络通信提供了基础API&#xff0c;使我们能够在应用程序中实现低级的网络交互。使用socket编程&#xff0c;可以创建TCP、UDP和RAW sockets来进行数据通信。 以下是Python socket 编程的简要概述&#xff1a; 1. 核心概念 Socket: 通信的端点&#x…

PTrade获取当日n个季度前的日期所处季度的最后一天——时间相关函数4

本文介绍的函数用于获取当日n个季度前的日期所处季度的最后一天&#xff08;有点绕&#xff0c;看后面例子就好理解了&#xff09;。 源码 def last_day_of_quarter_before_n_quarters(n):"""获取当日n个季度前的日期所处季度的最后一天:return: 当日n个季度前…

leetcode 打家劫舍篇

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

【嵌入式】STM32F031K4U6、STM32F031K6U6、STM32F031K6T6主流ARM Cortex-M0基本型系列MCU规格参数

一、电路原理图 【嵌入式】STM32F031K4U6、STM32F031K6U6、STM32F031K6T6主流ARM Cortex-M0基本型系列MCU —— 明佳达 二、规格参数 1、STM32F031K4U6&#xff08;16KB&#xff09;闪存 32UFQFPN 核心处理器&#xff1a;ARM Cortex-M0 内核规格&#xff1a;32 位单核 速度&a…

喜报!冲量在线中标中国电信北京公司2023年基于通用GPU的可信执行环境技术的研究项目

近日&#xff0c;冲量在线中标中国电信北京公司2023年基于通用GPU的可信执行环境的研究项目&#xff01;基于通用GPU的可信执行环境技术&#xff0c;完成业界领先的基于国产可信芯片的AI算力平台建设。 通过平台TEEGPU的隐私计算能力&#xff0c;给现有的AI智算平台在可信计算方…

必知必会的22种设计模式(GO语言)

日常工作中免不了使用设计模式&#xff0c;那么你使用了哪些设计模式呢&#xff1f; 设计模式是什么&#xff1f; 设计模式是一种在软件设计中对常见问题的通用解决方案。 它们是经过验证的、可重用的设计思想&#xff0c;可以帮助解决开发过程中遇到的各种问题。 设计模式…

碰撞检测算法——分离轴算法在Unity中实现(二)

一、介绍 分离轴算法&#xff08;简称SAT&#xff09;通常用于检查两个简单多边形&#xff08;凸边形&#xff09;之间或多边形与圆之间的碰撞。本质上&#xff0c;如果您能够绘制一条线来分隔两个多边形&#xff0c;则它们不会发生碰撞&#xff0c;如果找不到一条线来分割两个…

卷积神经网络CNN基础知识

目录 1 前言2 卷积神经网络CNN2.1 LeNet-5相关介绍2.2 CNN基本结构2.2.1 卷积层2.2.2 池化层&#xff08;下采样层&#xff09;2.2.3 全连接层2.2.3.1激励层&#xff08;非线性激活&#xff09;2.2.3.2 线性层2.2.3.3 Dropout层2.2.3.4 总结 2.3 图像的上采样和下采样2.3.1 上采…

vue2 .sync 修饰符

vue2 .sync 修饰符 **创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\13-sync修饰符 vue --version vue create v-sy…

高效团队协作软件推荐:提升工作效率的优选方案!

使用团队协作软件有什么好处&#xff1f;可以摆脱过时的电子表格&#xff0c;有了单一的真实来源&#xff0c;您可以随时检查任何任务并获得可用的最新信息。 一目了然地查看所有正在进行的工作&#xff0c;看板式面板、甘特图和燃尽图等可视化工具可让您随时轻松获得项目的高级…

基本微信小程序的购物商城系统

项目介绍 随着互联网的趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己的信息推广出去&#xff0c;最好方式就是建立自己的平台信息&#xff0c;并对其进行管理&#xff0c;随着现在智能手机的普及&#xff0c;人们对于智能手机里面的应用购物平台小程序也在不断的使…

javaweb:mybatis:mapper(sql映射+代理开发+配置文件之设置别名、多环境配置、顺序+注解开发)

1.0版本 sql映射文件实现 流程 首先程序进入启动类MyBatisDemo.java中&#xff0c;读取配置文件mybatis-config.xml 再由mybatis-config的mappers属性 <mappers><mapper resource"UserMapper.xml"></mapper></mappers>找到sql映射文件Use…

大数据精准营销一站式解决你的获客难题

自从千禧年之后&#xff0c;互联网逐渐走进每家每户&#xff0c;改变了人们的生活习惯&#xff0c;也改变了运营人的营销模式&#xff0c;使我们从传统营销转向互联网营销&#xff01; 新时代的到来&#xff0c;智能手机的问世又使互联网营销达到了一个新的高潮&#xff01;一些…

WEB 跨域

![Alt](https://img-home.csdnimg.cn/images/20220524100510.png 60x60 问题描述&#xff1a; web端的跨域&#xff1a; 响应头中出现重复&#xff0c;等其他关于跨域的奇奇怪怪的问题以下排查方式够了。 注&#xff1a; 以下最终解决问题的方式是将处理跨域的地方集中在一个…