当前位置: 首页 > news >正文

Spring Boot Web 应用开发

前言

MVC架构应用

spring-boot-starter-web

MVC

控制器注解

开发基本的Web应用

控制器注解

请求与响应

请求映射

常见匹配方式

参数绑定

JSON响应

ResponseEntity

构建RESTFUL

RESTful服务特点

理解表述性状态转移

RESTful设计原则

Spring Boot实现RESTful API

Spring Doc生成API文档

文件上传与下载

文件上传原理

SpringBoot实现文件上传功能

MultipartFile接口

上传配置

数据验证与异常处理

全局异常处理

数据验证

案例

总结与拓展


前言

Spring Boot作为当前Java领域最流行的Web应用开发框架,以其"约定优于配置"的理念和快速开发能力,赢得了广大开发者的青睐。本文将全面介绍Spring Boot Web应用开发的核心知识体系,帮助开发者快速构建高效、可扩展的Web应用程序。

MVC架构应用

spring-boot-starter-web

  • Spring Boot将传统Web开发的mvc、json、tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置。
  • 创建SpringBoot项目勾选Spring Web选项后,会自动将spring-boot-starter-web组件加入到项目中。
  • spring-boot-starter-web启动器主要包括web、webmvc、json、tomcat等基础依赖组件,作用是提供Web开发场景所需的所有底层依赖。
    webmvc为Web开发的基础框架,json为JSON数据解析组件,tomcat为自带的容器依赖。 
<dependency><groupId>org.spingframework.boot</groupId><artifactId>sping-boot-starter-web</artifactId>
</dependency>

MVC

  • 使用Spring Boot开发Web应用程序时,Spring MVC是其背后的主要驱动力,它为Web应用提供了模型-视图-控制器(MVC)的架构和组件。
  • MVC,即模型(Model)、视图(View)、控制器(Controller),是一种设计模式,用于将应用程序分为三个主要组件。

控制器注解

  • @Controller注解,控制器类中的方法通常返回一个字符串,代表逻辑视图的名称。
  • 这个视图名将被解析为一个实际的视图,例如一个JSP、Thymeleaf或FreeMarker模板。
@Controller
public class HelloController {@RequestMapping("/hello")public String index(ModelMap map){map.addAttribute("name", "zhangsan");return "hello";}}
  • @RestController是@Controller和@ResponseBody注解的结合体。它标记一个类为控制器,且类中的每个方法默认返回数据而非视图。
  • @RestController注解会将返回的对象数据转换为JSON格式。
@RestController
public class HelloController {@RequestMapping("/user")public User getUser(){User user = new User();user.setUsername("zhangsan");user.setPassword("123");return user;}
}

开发基本的Web应用

  • Spring Boot没有严格的项目结构,但它有一些约定,一个典型的Spring Boot项目的包结构如下:
  • 构建一个能够响应用户请求的Web服务,只需要经过以下
创建一个带有@RestController注解的类。
引入spring-boot-starter-web依赖。
在此类中定义一些带有@RequestMapping或其相关注解的方法。
@RestController
public class HelloController {@RequestMapping(value="/hello")public String index(){return "Hello World!";}
}

控制器注解

  • 示例中返回了hello页面和name的数据,在前端页面中可以通过${name}参数获取后台返回的数据并显示。
  • @Controller通常与Thymeleaf模板引擎结合使用。
    @Controller
    public class HelloController {@RequestMapping("/hello")public String index(ModelMap map){map.addAttribute("name", "zhangsan");return "hello";}}

请求与响应

请求映射

RequestMappinq 是 Sprina MVC 中的核心注解,用于将请求路径映射到特定的控制器方法。

常见匹配方式

  • @RequestMapping ("/books") 会将所有到 /books 的请求映射到控制器方法
  • @RequestMapping 注解的 method 属性允许根据 HTTP 请求的方法(如 GET、POST、PUT、DELETE 等)来进一步限定请求的匹配:
    @RequestMapping (value = "/users", method = RequestMethod.GET)
  • 为了简化开发,Spring 还提供了一些快捷注解:
    • @GetMapping: HTTP 的 GET 方法。
    • @PostMapping: HTTP 的 POST 方法。
    • @PutMapping: HTTP 的 PUT 方法。
    • @DeleteMapping: HTTP 的 DELETE 方法。
    • @PatchMapping: HTTP 的 PATCH 方法。

参数绑定

  • 在 Web 应用中,服务端经常需要获取浏览器传递的数据,例如用于搜索查询、分页、排序和过滤等场景。
  • 在 Spring Boot 中,有多种注解可用于将请求中传递的数据绑定到处理器方法的参数中,以便获取并处理这些数据。常用的注解包括:
    • @PathVariable: 从 URI 模板中提取值,如从 /books/{id} 中提取 id。
    • @RequestParam: 获取查询参数或表单数据。
    • @RequestBody: 将请求主体(通常为 JSON 或 XML)绑定到方法参数。
    • @RequestHeader: 获取请求头的值。
    • @CookieValue: 从 cookie 中提取值。

JSON响应

  • 涉及 Spring Boot 框架里的spring - boot - starter - web依赖、Jackson 库,还有@RestController注解 。
  • Jackson 库可自动将 Java 对象(如 List、Map、Set、基本数据类型及其包装类等)序列化为 JSON 格式
  • 当使用@RestController时,Spring Boot 会借助 Jackson 完成对象序列化。

ResponseEntity

  • ResponseEntity用于全面控制HTTP响应,包括状态码,头部信息和响应体内容
@GetMapping("/item/{id}")
public ResponseEntity<Item> getItem(@PathVariable Long id) {Item item = itemService.findById(id); // 调用服务层获取Item,此处仅为模拟if (item != null) {// 如果找到Item,返回状态码200 OK和Item对象return ResponseEntity.ok(item);} else {// 如果没有找到Item,返回状态码404 Not Foundreturn ResponseEntity.notFound().build();}
}

构建RESTFUL

RESTful服务概述

  • RESTful 服务是基于 REST(Representational State Transfer,表述性状态转移)架构风格的 Web 服务。
  • REST 并不是一个标准,它更像一组客户端和服务端交互时的架构理念和设计原则,基于这种架构理念和设计原则的 Web API 更加简洁,更有层次。

RESTful服务特点

理解表述性状态转移

RESTful设计原则

Spring Boot实现RESTful API

Spring Doc生成API文档

  • springdoc-openapi 是一个专为 Spring Boot 应用程序设计的开源库,可以快速、简便地生成 API 文档,从而促进前后端团队的无缝协作。
  • springdoc-openapi 还内嵌了 Swagger UI,这为开发者和用户提供了一个直观的界面来浏览和测试 API。
  • 为了在 Spring Boot 项目中集成 springdoc-openapi,首先需要在项目的 pom.xml 中添加相应的依赖
    <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.1.0</version>
    </dependency>
  • 当 Spring Boot 应用启动后,springdoc-openapi 会自动执行以下操作:
    • 扫描控制器:扫描所有带有 @RestController 和 @Controller 注解的类。
    • 读取路由信息:分析每个控制器类及其方法上的路由信息(如 @GetMapping、@PostMapping、@PutMapping 等)。
    • 参数和返回值:读取方法的参数和返回值,通常通过 Java 反射和相关库(如 Jackson)实现。
    • OpenAPI 注解:如果使用了 OpenAPI 相关注解(如 @Operation、@ApiResponse、@Parameter 等),也会被解析并包含在文档中。
    • 生成文档:基于收集到的信息,生成 OpenAPI 3.0 + 的描述文档。

  • 默认情况下,Swagger UI 可以通过 http://localhost:8080/swagger-ui.html 访问(假设应用运行在默认的 8080 端口)

文件上传与下载

文件上传原理

  • 浏览器上传文件过程是基于HTTP协议进行的,并使用特定的请求类型和编码方式。来传输文件数据。

SpringBoot实现文件上传功能

  • 在 Spring Boot 中处理文件上传主要依赖于 Spring Web 的 MultipartFile 接口。
  • MultipartFile 是一个专门用于处理 HTTP 请求中上传文件的接口。
  • 当客户端(如浏览器)通过 multipart/form - data 格式的表单提交文件时,Spring MVC 可以将这些文件映射为 MultipartFile 对象,以便在服务器端进行处理。

MultipartFile接口

上传配置

  • spring.servlet.multipart.max-file-size 定义了单个上传文件的最大大小。如果文件超过此限制,将抛出异常。
  • spring.servlet.multipart.max-request-size 定义了整个 multipart 请求的最大大小,包括所有文件和表单数据。
  • 在 application.properties 中,可以配置文件上传的相关属性,例如文件大小限制和存储位置。

数据验证与异常处理

全局异常处理

  • 全局异常处理允许在一个集中的位置处理所有的异常,确保整体的用户体验和应用的响应行为始终如一。

  • 在 Spring Boot 中,全局异常处理通常是通过使用@RestControllerAdvice@ExceptionHandler注解来实现的。
  • @RestControllerAdvice@ControllerAdvice的特殊变种,它默认将结果作为 JSON 返回,非常适合 RESTful 服务。

数据验证

  • Spring Boot 通过集成 Hibernate Validator 和使用 Java 的 Bean Validation API,为开发者提供了一套强大、灵活且易于使用的数据验证机制。
  • 要在 Spring Boot 应用程序中使用数据验证,首先需要添加相关的依赖,找 pom.xml 中加入以下依赖:
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
    </dependency>

    案例

总结与拓展

Spring Boot极大地简化了Java Web应用的开发流程,使开发者能够专注于业务逻辑而非框架配置。通过本文的介绍,希望读者能够掌握Spring Boot Web开发的核心要点,构建出高性能、易维护的Web应用程序。

在实际项目中,建议结合具体业务场景,灵活运用Spring Boot提供的各种特性,并持续关注Spring生态的最新发展,如Spring Native、Spring GraphQL等新兴技术。

通过本文的讲解,你已了解 Spring Boot Web 应用开发从项目搭建、核心组件使用到请求响应处理、异常处理及实战案例的完整流程。实际开发中,还可拓展更多功能:

  • 集成缓存:使用 Spring Cache 结合 Redis 等缓存中间件,提升应用性能。
  • 安全认证:集成 Spring Security 或 JWT ,实现用户认证与授权,保障接口安全。
  • 部署优化:通过 Docker 容器化部署,结合 Jenkins 等实现持续集成与持续部署(CI/CD ),提升开发运维效率。
http://www.xdnf.cn/news/1044487.html

相关文章:

  • 如何用AI绘画工具创作出属于你的拉布布(泡泡玛特)形象?
  • leetcode146-LRU缓存
  • rv1126+opencv多线程同时对视频进行膨胀和腐蚀
  • java 设计模式_行为型_20中介者模式
  • HTML的最基础入门知识,从零开始逐步讲解,适合为后续爬虫技术打基础:
  • Windows下Docker一键部署Dify教程
  • htmlcss考核
  • WebAssembly 2.0:超越浏览器的全栈计算革命
  • 【Zephyr 系列 26】跨平台测试框架设计:CLI + 自动脚本 + OTA 校验一体化方案
  • NVIDIA Isaac GR00T N1.5 人形机器人强化学习入门教程(四)Lerobot、宇树 G1 等不同形态机器人微调教程
  • Spring Boot的Security安全控制——应用SpringSecurity!
  • Java面试题022:一文深入了解微服务网关Gateway
  • 微软azure抢跑aws和谷歌云的区别
  • SpringMVC系列(一)(介绍,简单应用以及路径位置通配符)
  • 使用Nodejs尝试小程序后端服务编写:简单的待办事项管理demo
  • Java EE与Jakarta EE命名空间区别
  • Appium+python自动化(二十三)- Monkeyrunner与Monkey
  • 基于PPSO与BP神经网络回归模型的特征选择实战(Python实现)
  • Node.js 中常用的异步函数讲解、如何检测异步操作时间和事件
  • NodeJS的yarn和npm作用和区别,为什么建议用yarn
  • AWS 解决方案深度剖析:Amazon QLDB — 构建可信赖、不可变的数据审计基石
  • 智造奇点:AI超级工厂如何重塑制造业DNA
  • nodejs和npm升级
  • 什么是稳定币?
  • windows制作ubuntu系统安装盘
  • 算法题(169):最大子段和(分治思想)
  • AnimateCC及CreateJS:打飞机的4版本V1、V2、V3、V4
  • UltraISO绿色便携版v9 下载与安装教程
  • 基于51单片机的校园打铃及灯控制系统
  • 芯片测试之 trim修调详解