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

简介:

之前有一篇《5分钟构建spring web mvc REST风格HelloWorld》介绍了普通方式开发spring web mvc web service。接下来看看使用spring boot如何快速构建一个。

 

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 != nullreturn 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进行交流。

相关文章
|
11天前
|
安全 Linux 开发工具
零基础构建开源项目OpenIM桌面应用和pc web- Electron篇
OpenIM 为开发者提供开源即时通讯 SDK,作为 Twilio、Sendbird 等云服务的替代方案。借助 OpenIM,开发者可以构建安全可靠的即时通讯应用,如 WeChat、Zoom、Slack 等。 本仓库基于开源版 OpenIM SDK 开发,提供了一款基于 Electron 的即时通讯应用。您可以使用此应用程序作为 OpenIM SDK 的参考实现。本项目同时引用了 @openim/electron-client-sdk 和 @openim/wasm-client-sdk,分别为 Electron 版本和 Web 版本的 SDK,可以同时构建 PC Web 程序和桌面应用(Wi
28 2
|
23天前
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
42 6
|
1月前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
369 12
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
84 8
|
2月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
103 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
安全 应用服务中间件 网络安全
实战经验分享:利用免费SSL证书构建安全可靠的Web应用
本文分享了利用免费SSL证书构建安全Web应用的实战经验,涵盖选择合适的证书颁发机构、申请与获取证书、配置Web服务器、优化安全性及实际案例。帮助开发者提升应用安全性,增强用户信任。
|
2月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
210 5
|
3月前
|
监控 前端开发 JavaScript
使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践
使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践
59 6
|
4月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
268 3
|
3月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
159 62