Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

大模型学习路线之多模态模型 ​ (Frankly speaking,博主太懒了)章节一只对CLIP、BLIP、BLIP2、InstructBLIP进行了整理,章节二以CLIP、VisualGLM作为实践案例。​ 实际上多模态模型除了CLIP、BLIP、BLIP2、InstructBLIP,还有LLaVA、miniGPT4,以及国内清华的VisualGLM、阿里的Qwen-VL等。(更多多模态原理可以看文末的参考说明)一、多模态模型 & 理论。 阅读详情

转自:http://jinnianshilongnian.iteye.com/blog/1997192

 

Spring Boot使我们更容易去创建基于Spring的独立和产品级的可以”即时运行“的应用和服务。支持约定大于配置,目的是尽可能快地构建和运行Spring应用。

 

之前我们创建基于Spring的项目需要考虑添加哪些Spring依赖和第三方的依赖。使用Spring Boot后,我们可以以最小化的依赖开始spring应用。大多数Spring Boot应用需要很少的配置即可运行,比如我们可以创建独立独立大Java应用,然后通过java -jar运行启动或者传统的WAR部署。其也提供了命令行工具来直接运行Spring脚本(如groovy脚本)。也就是说Spring Boot让Spring应用从配置到运行变的更加简单,但不对Spring本身提供增强(即额外的功能)。

 

目的:

让所有Spring开发变得更快,且让更多的人更快的进行Spring入门体验,提供“starter” POM来简化我们的Maven配置(也就是说使用Spring Boot只有配合maven/gradle等这种依赖管理工具才能发挥它的能力),不像以前,构建一个springmvc项目需要进行好多配置等

开箱即用,快速开始需求开发而不被其他方面影响(如果可能会自动配置Spring)

 

提供一些非功能性的常见的大型项目类特性(如内嵌服务器、安全、度量、健康检查、外部化配置),如可以直接地内嵌Tomcat/Jetty(不需要单独去部署war包)

绝无代码生成,且无需XML配置

 

我的构建环境

JDK 7

Maven 3

Servlet3容器 

 

创建项目

首先使用Maven创建一个普通Maven应用即可,不必是web的。

 

添加Spring Boot相关POM配置

在pom.xml中添加如下配置

Java代码   收藏代码
  1. <!-- Inherit defaults from Spring Boot -->  
  2. <parent>  
  3.     <groupId>org.springframework.boot</groupId>  
  4.     <artifactId>spring-boot-starter-parent</artifactId>  
  5.     <version>0.5.0.BUILD-SNAPSHOT</version>  
  6. </parent>  
  7.   
  8. <!-- Add typical dependencies for a web application -->  
  9. <dependencies>  
  10.     <dependency>  
  11.         <groupId>org.springframework.boot</groupId>  
  12.         <artifactId>spring-boot-starter-web</artifactId>  
  13.     </dependency>  
  14. </dependencies>  
  15.   
  16. <!-- Package as an executable JAR -->  
  17. <build>  
  18.     <plugins>  
  19.         <plugin>  
  20.             <groupId>org.springframework.boot</groupId>  
  21.             <artifactId>spring-boot-maven-plugin</artifactId>  
  22.         </plugin>  
  23.     </plugins>  
  24. </build>  
  25.   
  26. <!-- Allow access to Spring milestones and snapshots -->  
  27. <!-- (you don't need this if you are using anything after 0.5.0.RELEASE) -->  
  28. <repositories>  
  29.     <repository>  
  30.         <id>spring-snapshots</id>  
  31.         <url>http://repo.spring.io/snapshot</url>  
  32.         <snapshots><enabled>true</enabled></snapshots>  
  33.     </repository>  
  34.     <repository>  
  35.         <id>spring-milestones</id>  
  36.         <url>http://repo.spring.io/milestone</url>  
  37.         <snapshots><enabled>true</enabled></snapshots>  
  38.     </repository>  
  39. </repositories>  
  40. <pluginRepositories>  
  41.     <pluginRepository>  
  42.         <id>spring-snapshots</id>  
  43.         <url>http://repo.spring.io/snapshot</url>  
  44.     </pluginRepository>  
  45.     <pluginRepository>  
  46.         <id>spring-milestones</id>  
  47.         <url>http://repo.spring.io/milestone</url>  
  48.     </pluginRepository>  
  49. </pluginRepositories>  

继承spring-boot-starter-parent后我们可以继承一些默认的依赖,这样就无需添加一堆相应的依赖,把依赖配置最小化;spring-boot-starter-web提供了对web的支持,spring-boot-maven-plugin提供了直接运行项目的插件,我们可以直接mvn spring-boot:run运行。

 

实体

Java代码   收藏代码
  1. package com.sishuok.entity;  
  2.   
  3. /** 
  4.  * <p>User: Zhang Kaitao 
  5.  * <p>Date: 13-12-22 
  6.  * <p>Version: 1.0 
  7.  */  
  8. public class User {  
  9.     private Long id;  
  10.     private String name;  
  11.   
  12.     public Long getId() {  
  13.         return id;  
  14.     }  
  15.   
  16.     public void setId(Long id) {  
  17.         this.id = id;  
  18.     }  
  19.   
  20.     public String getName() {  
  21.         return name;  
  22.     }  
  23.   
  24.     public void setName(String name) {  
  25.         this.name = name;  
  26.     }  
  27.   
  28.     @Override  
  29.     public boolean equals(Object o) {  
  30.         if (this == o) return true;  
  31.         if (o == null || getClass() != o.getClass()) return false;  
  32.   
  33.         User user = (User) o;  
  34.   
  35.         if (id != null ? !id.equals(user.id) : user.id != null) return false;  
  36.   
  37.         return true;  
  38.     }  
  39.   
  40.     @Override  
  41.     public int hashCode() {  
  42.         return id != null ? id.hashCode() : 0;  
  43.     }  
  44. }  

 

控制器

Java代码   收藏代码
  1. package com.sishuok.controller;  
  2.   
  3. import com.sishuok.entity.User;  
  4. import org.springframework.boot.SpringApplication;  
  5. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
  6. import org.springframework.web.bind.annotation.PathVariable;  
  7. import org.springframework.web.bind.annotation.RequestMapping;  
  8. import org.springframework.web.bind.annotation.RestController;  
  9.   
  10. /** 
  11.  * <p>User: Zhang Kaitao 
  12.  * <p>Date: 13-12-22 
  13.  * <p>Version: 1.0 
  14.  */  
  15. //@EnableAutoConfiguration  
  16. @RestController  
  17. @RequestMapping("/user")  
  18. public class UserController {  
  19.   
  20.     @RequestMapping("/{id}")  
  21.     public User view(@PathVariable("id") Long id) {  
  22.         User user = new User();  
  23.         user.setId(id);  
  24.         user.setName("zhang");  
  25.         return user;  
  26.     }  
  27.   
  28.     //public static void main(String[] args) {  
  29.     //    SpringApplication.run(UserController.class);  
  30.     //}  
  31.   
  32. }  

 

运行  

第一种方式

通过在UserController中加上@EnableAutoConfiguration开启自动配置,然后通过SpringApplication.run(UserController.class);运行这个控制器;这种方式只运行一个控制器比较方便;

第二种方式

通过@Configuration+@ComponentScan开启注解扫描并自动注册相应的注解Bean

Java代码   收藏代码
  1. package com.sishuok;  
  2.   
  3. import com.sishuok.controller.UserController;  
  4. import org.springframework.boot.SpringApplication;  
  5. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
  6. import org.springframework.context.annotation.ComponentScan;  
  7. import org.springframework.context.annotation.Configuration;  
  8.   
  9. /** 
  10.  * <p>User: Zhang Kaitao 
  11.  * <p>Date: 13-12-22 
  12.  * <p>Version: 1.0 
  13.  */  
  14. @Configuration  
  15. @ComponentScan  
  16. @EnableAutoConfiguration  
  17. public class Application {  
  18.     public static void main(String[] args) {  
  19.         SpringApplication.run(Application.class);  
  20.     }  
  21. }  

到此,一个基本的REST风格的web应用就构建完成了。

 

地址栏输入http://localhost:8080/user/1即可看到json结果。

 

 

如果大家查看其依赖,会发现自动添加了需要相应的依赖(不管你用/不用),但是开发一个应用确实变得非常快速,对于想学习/体验Spring的新手,快速建立项目模型等可以考虑用这种方式。当然如果不想依赖这么多的jar包,可以去掉parent,然后自己添加依赖。 

 

欢迎加入spring群134755960进行交流。

 

参考

https://github.com/spring-projects/spring-boot

 

25、格式化字符串攻击全解析 本文深入解析了格式化字符串攻击的原理与利用方式,涵盖缓冲区溢出与格式化字符串漏洞的区别,详细介绍了printf函数的工作机制、常见格式化说明符及其安全隐患。文章分析了三类典型编程错误导致的漏洞,并展示了如何通过恶意格式化字符串实现拒绝服务、内存读取和写入攻击。同时,提供了有效的防御措施,包括输入验证、使用安全函数、避免直接使用用户输入作为格式化字符串以及启用编译器安全选项,帮助开发者防范此类高危漏洞。 阅读详情

相关推荐

大疆无人机地理视频制作全流程:从SRT文件到GIS叠加(附实战避坑指南)

本文详细解析了大疆无人机地理视频制作全流程,从解析SRT文件中的位姿数据,到在GIS软件中构建地理视频工程并生成可分发的文件。文章重点介绍了地理视频的核心概念、数据处理实战技巧,并探讨了其在应急响应、工程巡检等场景的高级应用与精度边界,为GIS工程师和无人机爱好者提供了一份实用的避坑指南。

river的博客 463

SpringBoot如何使用Rest设计风格

注释中的是SpringMVC的原生Rest风格,SpringBoot又进行了二次包装,减少了代码量。

MY_baldy的博客 209

MiFlash Prime免授权刷机实战:解锁小米9008 EDL救砖新方案

MiFlash Prime作为免授权刷机工具,有效解决了小米设备在9008 EDL模式下因账号验证无法救砖的难题。本文详细介绍了从驱动安装、进入EDL模式到固件刷写的完整流程,帮助用户安全快速地恢复变砖设备,是维修人员和极客的实用解决方案。

5f4d3s2a1q的博客 2859

模型驱动低代码:用业务语义编译器重构开发范式

模型驱动开发(MDD)是一种将业务逻辑抽象为可计算、可验证、可版本化模型的软件工程方法,其核心在于通过元数据层统一表达实体、规则与视图,实现跨技术栈的契约一致性。相比传统低代码平台依赖可视化拖拽和硬编码拼接,模型驱动方案以语义编译器为枢纽,自动推导前端界面、服务逻辑、数据约束与集成配置,显著提升复杂业务演进下的可维护性与响应速度。该范式特别适用于需高频迭代规则、多系统语义对齐、强合规审计要求的企业级应用,如供应链准入、信贷审批、经销商返利等场景。VibeCoding作为业务语义编译器,聚宝D-Pro作为模型

weixin_33857230的博客 317

为什么PCB设计中的50Ω阻抗如此重要?从USB到以太网的实战解析

本文深入解析了PCB设计中50Ω特征阻抗的核心重要性及其工程权衡起源。文章从传输线理论出发,阐释了阻抗匹配对防止信号反射、确保信号完整性的关键作用,并对比了USB、以太网等不同应用场景的阻抗标准。同时,文章结合实际案例,剖析了在两层板等简单设计中实现精准阻抗控制的难点与实战解决方案。

weixin_29268385的博客 297

Qt Android MySql 数据库驱动编译(详细图解步骤)

第一步.先介绍下环境搭建: Qt 版本 5.12.11 下载链接 https://download.qt.io/archive/qt/5.12/5.12.11/qt-opensource-linux-x64-5.12.11.run Ubuntu 18.04.6 LTS 下载链接 JDK版本 1.8.0_191 下载链接https://www.oracle.com/java/technologies/downloads/ Android Studio版本 ...

h a 6 6 6 c k 为 你解决复杂难题! 3380

[转]Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

Spring Boot——2分钟构建spring web mvc REST风格HelloWorld http://projects.spring.io/spring-boot/ http://spring.io/guides#gs example 博客分类:   springmvc杂谈 springspring boot 之前有一篇《5分钟构建spring web...

weixin_33863087的博客 83

基于STM32+华为云设计的智能鱼缸

本项目基于STM32单片机设计一款基于物联网的智能鱼缸系统,并通过应用侧接口开发上位机APP实现远程对鱼缸参数的检测和控制。该系统包括水温检测、水质检测、自动或手动换水、氛围灯灯光变换和自动或手动喂食等功能,可以帮助用户更好地管理鱼缸,提高鱼儿的生存率,同时增强用户对家庭装饰品的掌控感和科技感。

1万+

浩鲸科技GIS校招笔试全解析:从空间分析到实操排错

在GIS(地理信息系统)的应用中,无论是智慧城市还是资源管理,空间分析都是核心技术能力。用户常需要从离散采样点生成连续表面,这便涉及插值原理;而确保矢量数据的准确性与完整性,则依赖拓扑完整过程。这些技术不仅是GIS软件操作的基础,更直接决定了业务场景中数据分析和决策支持的效率。从坐标系转换、缓冲区分析,到核密度计算报错排查、批量出图等数据操作,都是GIS岗位的实战高频场景。浩鲸科技作为政企软件服务商,其校招笔试正是围绕这些工程化技能展开,重点考察候选人处理真实数据、解决实际问题的能力。本文基于笔试真题,从理

weixin_34252090的博客 270

基于STM32设计的计算器(实现基本运算)

当前文章介绍的是STM32+LCD触摸屏设计的一个触摸计算器功能,实现基本的加减乘除,二进制转换显示等功能。LCD屏使用的是3.5寸带触摸屏的显示屏,方便操作屏幕,MCU采用STM32F103ZET6。

8816

VN5620以太网测试——环境搭建篇

CANoe(CAN open environment)VN5620 :是一个紧凑而强大的接口,用于以太网网络的分析、仿真、测试和验证。VN5620 接口支持各种可能的应用。它适用于与其他总线系统、网络参与(例如在模拟和生成帧、测试中的负载和错误)的同步以太网监控。在2021年Vector公司的以太网接口卡VN5610和VN5640设备已经陆续停产,相应被VN5620和VN5650代替。

诊断协议那些事儿's blog 8927
上一篇: Failed to load JavaHL Library解决方法
下一篇: Oracle中用一个表更新另一个表
cube_chen
博客等级 码龄18年 27粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值