开发测试框架一 - 创建springboot工程及基础操作

news2024/11/24 17:00:48

一、创建及运行方式

1. 从官网导入:

注意:由于我的java版本是1.8;所以选中了spring2.7.14;

如果你的java版本是9及以上,选中spring3相关的

同时Java 版本也要对应起来

2. 创建第一个get请求

 创建Controller  package及类,创建以下的代码:

package com.example.aitestmini.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

//与前端请求的类
@RestController
public class firstController {

    //需求:get请求,路径/first, 前端显示hello springboot
    @GetMapping("/first")
    String first(){
        return "Hello Spring!";
        // http://localhost:8080/first
    }
}

运行:

运行AitestMiniApplication的run()方法

在浏览器访问http://localhost:8080/first,应该是展示hello spring

8080端口被占用,使用以下命令查看占用端口的pid:
lsof -i :8080
执行下面命令kill调进程:
kill -9 pid

3. 打包

mvn package 
执行以上命令,会在target/目录下自动生成jar包

4. 运行方式

方式一:
之前已经说过了,执行run()方法
方式二:
java -jar target/aitest-mini-0.0.1-SNAPSHOT.jar
运行以上命令,jar是刚才打出来的jar包
方式三:
mvn spring-boot:run
执行以上命令

二、端口管理

1. 常见端口实名方式

如果配置文件不声明端口,默认按照8080

1. application.properties配置文件管理端口:
server.port=8081

2. application.yml配置文件管理端口:
server:
  port: 8082

3. 运行命令声明端口
mvn clean package
java -jar -Dserver.port=8083 target/aitest-mini-0.0.1-SNAPSHOT.jar

2. 不同环境配置不同的端口

  • 针对环境创建不同的配置文件

 

 

 3. 运行不同环境端口的方式

1. application.properties管理:

spring.profiles.active=dev

2. application.yml管理
spring:
  profiles:
    active: dev

3. 在pom文件管理
	<profiles>
		<profile>
			<id>dev</id>
			<properties>
				<profilesActive>dev</profilesActive>
			</properties>
		</profile>

		<profile>
			<id>qa</id>
			<properties>
				<profilesActive>qa</profilesActive>
			</properties>
			<!-- 默认qa环境-->
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
		</profile>
	</profiles>


添加上面的依赖,在application.properties管理:
spring.profiles.active=@profilesActive@

三、Get请求Demo

1. 普通get请求的声明方式

1. 方法名前面使用:@GetMapping("/first")
2. 方法名前面使用:@RequestMapping(path = "/first",method = RequestMethod.GET)
@RestController
public class firstController {

    //需求:get请求,路径/first, 前端显示hello springboot
//    @GetMapping("/first")
    @RequestMapping(path = "/first",method = RequestMethod.GET)
    String first(){
        return "Hello Spring!";
        // http://localhost:8080/first
    }
}

2. 带有参数的Get请求

需求:
http://localhost:8081/topic/{id}
对应浏览器显示地址:{id}为内容
// 如果不想写@PathVariable("id")里面的id,需要保证传入的id->sid
@RestController
public class BaseGetWithIdController {

    @GetMapping("/topic/{id}")
    String getTopic(@PathVariable("id") String tid){
        return "请求的id为 " + tid + " 的内容!!!";
    }
}

3. 在queryParam拼接

需求:http://localhost:8081/native?s={sid}
对应浏览器显示地址:这是一个本国地址为:{sid}的内容
@GetMapping("/native")
    String getNative(@RequestParam("s") String sid){
        return "这是一个本国地址为:" + sid + " 的内容!";
    }

升级:

如果当s=66,打印不一样的内容:


    @GetMapping("/native")
    String getNative(@RequestParam("s") String sid){
        return "这是一个本国地址为:" + sid + " 的内容!";
    }

    @GetMapping(path = "/native", params = {
            "s=66"
    })
    String getNative1(@RequestParam("s") String sid){
        return "这是一个本国地址为:" + sid + " 的内容!getNative1";
    }

4. 在controller前面加@RequestMapping("/t")

效果:相当于全部的链接前面加了/t会被自动识别

代码:

 @RequestMapping(path = "/first",method = RequestMethod.GET)
    String first(){
        return "Hello Spring!";
        // http://localhost:8080/first
    }

5. PathVariable参数非必填

//1. @PathVariable(value = "did",required = false)中的required默认是true,可以设置为false
//2. 声明完成之后, 对应的访问路径会有2中,需在GetMapping里面说明value = {"/topic/{did}/u","/topic/u"}

    @GetMapping(value = {"/topic/{did}/u",
                        "/topic/u"})
    String getTopic1(@PathVariable(value = "did",required = false) String topid,
                     @RequestParam(defaultValue = "66") int sid){
        return "请求的id为 " + topid + " 的内容!!!并且参数sid为" + sid + "的内容!!!";
    }
    //http://localhost:8081/t/topic/99/u
    //http://localhost:8081/t/topic/u

6. RequestParam非必填及提供默认值

    @GetMapping("/top/{city}/{year}")
    String getRUIWithPara(@PathVariable int year,
                          @PathVariable String city,
                          @RequestParam(defaultValue = "GDP",required = false) String desc,
                          @RequestParam(defaultValue = "45666") int money){
        return "{"+ year + "}年{" + city + "}人均{" + desc + "}为:{" + money + "}";
    }
1. desc非必填,但是GetMapping的值只有一个,因为desc的类型不是PathVariable
2. @RequestParam(defaultValue = "GDP",required = false) String desc
    说明RequestParam的required如果为false可以非必填

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

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

相关文章

【深入理解C语言】-- 关键字1

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;深入理解C语言 &#x1f4a8;吾生也有涯&#xff0c;而知也无涯 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 文章目录 前言一、auto1.1 auto的介…

【MySQL】表的内连和外连

本期我们来谈谈表的连接 目录 一、内连接 二、外连接 2.1 左外连接 2.2 右外连接 一、内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;我们上期学习的复合查询都是内连接&#xff0c;也是在开发过程中使用的最多的连接查询 使用内连接时…

proteus结合keil-arm编译器构建STM32单片机项目进行仿真

proteus是可以直接创建设计图和源码的&#xff0c;但是源码编译它需要借助keil-arm编译器&#xff0c;也就是我们安装keil-mdk之后自带的编译器。 下面给出一个完整的示例&#xff0c;主要是做一个LED灯闪烁的效果。 新建工程指定路径&#xff0c;Schematic,PCB layout都选择默…

记一次mybatis-plus关于Long和long自动添加过滤条件的bug记录

文章目录 1.前提条件2.相关知识3.原理解释&#xff1a;4.情景复现&#xff1a; 1.前提条件 接口代码是由mybatis-plus封装的page分页 有一个实体类属性类型是long和Long的区别&#xff1a;long会添加一个过滤条件未异常情况&#xff0c;改成Long则不会添加是正常情况,详细情况参…

leetcode358周赛

2815. 数组中的最大数对和 核心思想&#xff1a;维护每一个最大的数字的最大值&#xff0c;然后一边更新最大值&#xff0c;一边统计结果。其中求nums中的每一个数的数位最大值可以用map的方法&#xff0c;我自己做的时候是用的%10&#xff0c;感觉map这种方法很巧妙。 2816. …

如何在iPhone手机上修改手机定位和模拟导航?

如何在iPhone手机上修改手机定位和模拟导航&#xff1f; English 首先&#xff0c;你需要在Mac电脑上下载安装 Location Simulator/定位模拟工具 和 Runner 这两款应用程序。 完成安装后&#xff0c;打开软件&#xff0c;并用USB连接手机设备 修改iPhone手机定位和模拟导航 …

锐捷无线产品运维

目录 登录AP产品 Console登录&#xff08;只可以现场登录&#xff09; Web/Telnet/SSH登录&#xff08;可以现场、远程登录&#xff09; 配置AP的管理地址 通过Web界面远程登录 通过Telnet、SSH等命令行的方式登录 登录AC产品 Console登录&#xff08;只可以现场登录&a…

CSS中的position属性有哪些值,并分别描述它们的作用。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ static⭐ relative⭐ absolute⭐ fixed⭐ sticky⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那…

梯度下降介绍

什么是梯度 梯度是微积分中一个很重要的概念&#xff0c;在单变量的函数中&#xff0c;梯度其实就是函数的微分&#xff0c;代表着函数在某个给定点的切线的斜率&#xff1b;在多变量函数中&#xff0c;梯度是一个向量&#xff0c;向量有方向&#xff0c;梯度的方向就指出了函…

【2023年11月第四版教材】《第4章-信息系统管理(合集篇)》

第4章-信息系统管理之管理方法&#xff08;第四版新增章节&#xff09;&#xff08;第一部分&#xff09; 章节说明1 管理方法1.1 信息系统四个要素1.2 信息系统四大领域1.3 信息系统战略三角1.4 信息系统架构转换1.5 信息系统体系架构1.6 信息系统运行1.7 运行和监控1.8 管理和…

day42时间格式转化

题目描述&#xff1a; 解题思路 1.将字符串给以" "为间隔进行切割然后各个部分进行不同的处理。 字符串切割使用 strtok(char* a, char* b) 函数&#xff0c;该函数返回切割完成后第一个子串的指针。 //切割&#xff0c;返回第一个字串的指针。这里注意&#xff0c;…

Kafka3.0.0版本——Broker( 退役旧节点)示例

目录 一、服务器信息二、先启动4台zookeeper&#xff0c;再启动4台kafka三、通过PrettyZoo工具验证启动的kafka是否ok四、查看4台kafka集群节点上是否存在创建的名称为news的主题五、退役旧节点5.1、执行负载均衡操作5.2、 执行停止命令5.3、再次查看kafka中的创建过的名称为ne…

单片机通讯技术应用解析:传感器数据交互、外设控制与配置等案例分析

随着科技的不断发展&#xff0c;单片机通讯技术在各个领域的应用越来越广泛。本文将从单片机通讯技术的基本原理、常见通讯方式以及应用案例等方面进行详细介绍和分析。 首先&#xff0c;我们将深入探讨单片机通讯技术的基本原理和通讯方式。单片机通讯的基本原理是通过特定的…

Element Plus报错:ResizeObserver loop completed with undelivered notifications.

el-selected踩坑&#xff1a;el-selected 显示下拉框 mouseover 时报错&#xff01;&#xff01;&#xff01; 原来是属性 popper-append-to-body 被废除&#xff0c;改为 teleported。 element ui <el-select:popper-append-to-body"false"value-key"id&q…

【无监督】2、MAE | 自监督模型提取的图像特征也很能打!(CVPR2022 Oral)

文章目录 一、背景二、方法三、效果 论文&#xff1a;Masked Autoencoders Are Scalable Vision Learners 代码&#xff1a;https://github.com/facebookresearch/mae 出处&#xff1a;CVPR2022 Oral | 何凯明 | FAIR 一、背景 本文的标题突出了两个词&#xff1a; masked…

基于 ObjectOutputStream 实现 对象与二进制数据 的序列化和反序列化

目录 为什么要进行序列化呢&#xff1f; 如何实现 对象与二进制数据 的序列化和反序列化&#xff1f; 为什么要进行序列化呢&#xff1f; 主要是为了把一个对象&#xff08;结构化的数据&#xff09;转化成一个 字符串 / 字节数组&#xff0c;方便我们存储&#xff08;有时候需…

Web安全:中间件漏洞

中间件一般指的是IIS、Apache、Nginx、Tomcat及Weblogic等一系列Web服务器中间件。中间件存在漏洞会直接威胁Web服务器代码及后台数据库的安全。 以前出现过的中间件漏洞一般是文件解析漏洞&#xff0c;例如IIS文件解析漏洞、Apache文件解析漏洞及Nginx文件解析漏洞等。如今我…

大模型时代和传统机器学习时代工具栈侧重点有所不同

大模型时代和传统机器学习时代工具栈侧重点有所不同 本章从企业训练模型、构建AI赋能应用的工作流视角出发,详解涉及的主要环节,并关注LLMOps和MLOps在流程上的侧重点差异。我们认为AI = Data + Code,历经数据准备、模型训练、模型部署、产品整合,分环节看: ► 数据准…

服务器安全防御要注意哪些方面?

服务器安全是我们每个互联网公司都应该做好的一个环节&#xff0c;每个互联网公司都会涉及到信息数据安全&#xff0c;而这些数据信息一般存放的地方都是在服务器&#xff0c;如果服务器受到破坏&#xff0c;我们的数据信息将会受到侵犯届时将会造成不可挽回的损失&#xff0c;…

三维模型OSGB格式轻量化在网络传输中的重要性探讨

三维模型OSGB格式轻量化在网络传输中的重要性探讨 随着三维模型应用的不断增加&#xff0c;网络传输成为了将三维模型从一个地方传输到另一个地方的主要方式。在网络传输中&#xff0c;数据量越大&#xff0c;传输速度就越慢&#xff0c;因此轻量化OSGB格式的三维模型数据在网络…