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

php 网站调试wordpress搭建像册

php 网站调试,wordpress搭建像册,中国建设传媒网官网,门户网站和微网站的区别概念 什么是SpringBoot#xff1f; Spring Boot 是基于 Spring Framework 的一款开源框架#xff0c;主要用于简化 Spring 应用程序的开发。它通过提供一系列的 开箱即用的功能 和 自动配置#xff0c;让开发者可以快速构建生产级别的独立应用程序#xff0c;而无需手动配…概念 什么是SpringBoot Spring Boot 是基于 Spring Framework 的一款开源框架主要用于简化 Spring 应用程序的开发。它通过提供一系列的 开箱即用的功能 和 自动配置让开发者可以快速构建生产级别的独立应用程序而无需手动配置大量的 XML 或注解。 Spring Boot 的目标是让开发者能够专注于业务逻辑减少繁杂的配置工作从而提升开发效率。 什么是 Spring MVC Spring MVCModel-View-Controller是 Spring Framework 中的一个模块专门用于构建基于 HTTP 的 Web 应用程序它遵循经典的 MVC 架构模式。Spring MVC 提供了一套灵活、强大的工具用于开发动态 Web 应用或 RESTful API。 通过 Spring MVC开发者可以轻松处理 HTTP 请求、业务逻辑和视图层的渲染同时保持应用的模块化和可维护性。 Spring MVC 的核心概念 Spring MVC 基于 Model-View-Controller 模式将应用分为以下三个部分 1. Model模型 表示应用程序的数据或业务逻辑。通常由 POJOPlain Old Java Object或 DTO数据传输对象组成。在实际开发中Model 通常是从数据库中获取的业务实体。 2. View视图 负责将数据Model渲染为用户可以看到的页面或响应数据。支持多种视图技术例如 JSP、Thymeleaf、FreeMarker 等。对于 RESTful 应用视图层通常是 JSON 或 XML 格式的响应。 3. Controller控制器 负责接收用户请求并将其分发给合适的服务或处理逻辑。控制器将数据与视图进行绑定最终返回一个完整的响应。 Spring MVC 的工作流程 用户通过浏览器发送一个 HTTP 请求。请求被 Spring MVC 的 DispatcherServlet 拦截。DispatcherServlet 将请求分发给合适的 Controller。Controller 调用业务逻辑层或服务层获取数据并封装为 Model。DispatcherServlet 将返回的数据传递给指定的视图View。视图渲染最终的 HTML 页面或响应数据并返回给用户。 Spring MVC 的核心组件 以下是 Spring MVC 的几个核心组件及其作用 1. DispatcherServlet 是 Spring MVC 的核心负责拦截所有 HTTP 请求。它将请求分发给适当的处理器Controller并协调其他组件如视图解析器和模型绑定器。 2. Controller 使用注解如 Controller 或 RestController标注的类用于处理业务逻辑。处理用户请求并返回数据或视图。 3. ModelAndView 一个对象用于封装数据Model和视图View。Controller 可以返回 ModelAndView 来指定渲染的数据和视图名称。 4. ViewResolver视图解析器 负责将逻辑视图名称转换为具体的视图。例如将返回的视图名 home 映射到 home.jsp 或 home.html。 5. HandlerMapping 负责将用户请求 URL 映射到具体的 Controller 方法。 6. Model 用于在 Controller 和 View 之间传递数据。 springboot架构 首先我们先看下面这张图待会会根据该图中的各个层进行项目创建 Maven上手 这里我们使用IDEA进行Maven项目的创建这里我们选择Maven创建 这里我们选择springWeb和mysql pom.xml 如果我们后续还需要添加依赖的话可以直接在项目的pom.xml中的dependencys中添加依赖 配置文件 在application.properties中我们可以配置数据库的连接、后端端口等内容 项目结构 仿照上图的SpringBoot架构我们创建以下文件夹来划分各个层次 什么是 POJO POJO 是 Plain Old Java Object 的缩写意为“普通的旧式 Java 对象”。它是一个 纯粹的 Java 对象不依赖于任何特定的框架或库通常只包含 属性、构造方法、Getter 和 Setter 方法 以及少量的业务逻辑。 POJO 的核心思想是保持对象简单、轻量化避免引入框架特定的依赖或复杂的特性如继承特定的类或实现框架接口。 POJO 的特点 轻量化 没有继承任何框架特定的类如 HttpServlet。不实现任何框架特定的接口如 Serializable 除外。 纯粹性 只包含简单的属性字段和方法如 Getter 和 Setter。不依赖框架代码适用于任何 Java 环境。 无强制要求 POJO 不需要遵循特定规范只要是普通的 Java 对象即可。 POJO 的常见用途 数据传输对象DTO 用于在不同层如 Controller 和 Service 层之间传输数据的对象。通常只包含属性和 Getter/Setter 方法。 实体类Entity 用于映射数据库表的类通常用于 ORM 框架如 Hibernate、JPA。每个字段对应数据库表中的一列。 模型类 用于封装业务逻辑中的数据模型。 配置类 用于封装应用程序的配置信息。 pojo的示例——user package com.jiaowu.backend.pojo;import jakarta.persistence.*;Table(name tb_user) Entity public class User {IdGeneratedValue(strategy GenerationType.IDENTITY)Column(nameuser_id)private Integer id;Column(nameuser_name)private String name;Column(nameuser_password)private String password;Column(nameuser_email)private String email;public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}public String getEmail() {return email;}public void setEmail(String email) {this.email email;}Overridepublic String toString() {return User{ id id , name name \ , password password \ , email email \ };} } 注解总结 以下是代码中各注解的作用和含义 1. Table(name tb_user) 作用指定该实体类对应的数据库表名称。解释将类 User 映射到名为 tb_user 的数据库表。如果不加该注解默认表名会与类名一致。 2. Entity 作用将该类标记为一个 JPA 实体类。解释User 类会被 JPA 识别为数据库中的一个表实体JPA 会根据该类的属性与注解生成对应的数据库表操作。 3. Id 作用指定该字段为主键。解释id 字段是数据库表 tb_user 的主键。每个实体对象都需要一个唯一标识Id 用来表明哪个字段是主键。 4. GeneratedValue(strategy GenerationType.IDENTITY) 作用定义主键的生成策略。解释 使用 自增策略IDENTITY 生成方式即数据库会自动生成主键值如 MySQL 的自增主键。每次插入新数据时id 字段的值会由数据库自动递增。 5. Column(name user_id) 作用将实体类的字段映射到数据库表中的列并指定列名。解释 id 字段映射到数据库表 tb_user 中的 user_id 列。如果不加 Column 注解JPA 会默认将字段名与列名一致如字段名为 id则列名也为 id。 6. Column(name user_name) 作用将 name 字段映射到数据库表中的 user_name 列。 7. Column(name user_password) 作用将 password 字段映射到数据库表中的 user_password 列。 8. Column(name user_email) 作用将 email 字段映射到数据库表中的 user_email 列。 代码的注解功能 类级别注解 Entity将类标记为 JPA 实体类。Table(name tb_user)将类与数据库表 tb_user 进行映射。 字段级别注解 Id标识主键字段。GeneratedValue(strategy GenerationType.IDENTITY)主键使用数据库的自增策略。Column(name xxx)将字段映射到数据库表的指定列名。 通过这些注解JPA 框架可以自动将类 User 与数据库表 tb_user 关联起来并根据类的字段与数据库列之间的映射关系帮助开发者进行数据库操作如增删改查。 备注 标记为 JPA 实体类的作用 在 Java Persistence APIJPA中将类标记为实体类通过 Entity 注解有以下作用 1. 将类映射为数据库表 Entity 告诉 JPA 框架这个类是一个 实体类需要与数据库中的表进行映射。每个实体类的实例对象对应数据库表中的一行数据。类的字段属性通过注解如 Column映射到数据库表的列。 示例 Entity Table(name tb_user) public class User {Idprivate Integer id; // 对应 tb_user 表的主键列private String name; // 对应 tb_user 表中的 name 列 }总结 将类标记为 JPA 实体类的作用主要体现在以下几个方面 映射类与数据库表的关系通过注解定义类与表、字段与列的映射规则。启用 ORM 功能实现对象与数据库记录的自动转换简化数据操作。支持持久化操作通过 JPA 的 API 或框架如 Spring Data JPA操作数据库而无需手写 SQL。与数据库表结构集成支持自动生成或更新表结构便于维护。增强功能支持如关联关系管理、懒加载、级联操作等。 controller 这里我们写好了用于各个层之间交换的数据结构后我们就开始正式进行后端项目的功能的编写。这里我们从controller层开始写。我们在这里只需要使用对数据库的增删改查功能 package com.jiaowu.backend.controller;import com.jiaowu.backend.pojo.ResponseMessage; import com.jiaowu.backend.pojo.User; import com.jiaowu.backend.pojo.dto.UserDto; import com.jiaowu.backend.service.IUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*;import java.util.List;RestController //允许接口方法返回对象转换成json文本 RequestMapping(/user) // localhost:8080/user/** public class UserController {AutowiredIUserService userService;//REST——请求方法//增加PostMapping // localhost:8080/user method:postpublic ResponseMessageUser addUser(Validated RequestBody UserDto user) {User userNew userService.add(user);return ResponseMessage.success(userNew);}//查询GetMapping(/{userId}) // localhost:8080/user/{userId} method:getpublic ResponseMessageUser get(PathVariable Integer userId) {User userNew userService.getUser(userId);return ResponseMessage.success(userNew);}GetMapping(/all)public ResponseMessageUser getAll() {ListUser userNew userService.getAll();return ResponseMessage.success(userNew);}//修改PutMappingpublic ResponseMessageUser edit(Validated RequestBody UserDto userId) {User userNew userService.edit(userId);return ResponseMessage.success(userNew);}//删除DeleteMapping(/{userId})public ResponseMessageUser delete(PathVariable Integer userId) {userService.delete(userId);return ResponseMessage.success();} } 代码注释总结 以下是代码中各注释的作用与含义 类级别注解 1. RestController 作用标识该类为一个 RESTful 控制器。功能允许接口方法直接返回对象Spring 会将对象自动转换为 JSON 格式的响应。 2. RequestMapping(/user) 作用为该控制器类定义一个基础 URL 前缀。功能所有方法的 URL 都以 /user 开头例如 localhost:8080/user 成员变量注解 3. Autowired 作用自动注入 IUserService 接口的实现类。功能使 userService 变量可以直接调用服务层的逻辑。 方法级别注解 增加用户 4. PostMapping 作用映射 HTTP POST 请求。功能处理 localhost:8080/user 的 POST 请求用于新增用户。 5. Validated 作用启用数据校验。功能对请求体中的 UserDto 对象进行校验例如检查字段的格式或必填项。 6. RequestBody 作用将 HTTP 请求体的 JSON 数据反序列化为 Java 对象。功能将客户端发送的用户数据解析为 UserDto 对象。 查询用户 7. GetMapping(/{userId}) 作用映射 HTTP GET 请求。功能处理 localhost:8080/user/{userId} 的 GET 请求用于根据用户 ID 查询用户。 8. PathVariable 作用将 URL 中的动态路径变量绑定到方法参数。功能将 {userId} 解析为方法的 userId 参数。 9. GetMapping(/all) 作用映射 HTTP GET 请求。功能处理 localhost:8080/user/all 的 GET 请求返回所有用户信息。 修改用户 10. PutMapping 作用映射 HTTP PUT 请求。功能处理 localhost:8080/user 的 PUT 请求用于修改用户信息。 删除用户 11. DeleteMapping(/{userId}) 作用映射 HTTP DELETE 请求。功能处理 localhost:8080/user/{userId} 的 DELETE 请求用于根据用户 ID 删除用户。 方法返回值说明 12. 返回值类型 类型ResponseMessageUser作用封装接口的响应结果通常包括 success请求是否成功。data具体返回的数据如用户对象或用户列表。message提示信息。 总结 代码功能 控制器类定义了与用户相关的 RESTful 接口包括新增、查询、修改、删除用户等操作。注解使用通过 Spring MVC 注解如 RestController、PostMapping、GetMapping 等简化了接口开发清晰地定义了请求的类型和 URL 路径。数据流 客户端发送 JSON 请求。通过 RequestBody 反序列化为 Java 对象。调用服务层逻辑处理数据。最终返回 JSON 格式的响应。 RESTful 接口一览 请求方法URL描述POST/user新增用户GET/user/{userId}查询用户GET/user/all查询所有用户PUT/user修改用户DELETE/user/{userId}删除用户 repository 这里我们实现数据访问层 package com.jiaowu.backend.repository;import com.jiaowu.backend.pojo.User; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository;Repository public interface UserRepository extends CrudRepositoryUser, Integer {} 代码分析与注释总结 以下是代码中注释的作用与详细解释 1. Repository 作用将接口标记为一个 Spring 数据访问层组件。功能 表示当前接口是一个 DAO数据访问对象负责与数据库交互。Spring 会将该接口的实现类自动注册为 Bean并纳入到 Spring 容器中管理。提供数据访问相关的异常转换功能将底层的数据库异常转换为 Spring 的统一异常如 DataAccessException。 2. public interface UserRepository extends CrudRepositoryUser, Integer 作用定义一个 JPA Repository用于对 User 实体进行 CRUD增删改查操作。解释 UserRepository 是一个接口继承了 Spring Data 提供的 CrudRepository 接口。不需要手动实现Spring 会自动生成实现类。 CrudRepositoryUser, Integer 泛型参数解析 User指定该仓库要操作的实体类类型。Integer指定主键的类型id 的数据类型是 Integer。 3. CrudRepository 的功能 CrudRepository 是 Spring Data JPA 提供的一个基础接口包含了常用的 CRUD 操作方法。通过继承 CrudRepository可以直接使用这些方法无需额外实现。 service 编写业务逻辑层 package com.jiaowu.backend.service;import com.jiaowu.backend.pojo.User; import com.jiaowu.backend.pojo.dto.UserDto; import com.jiaowu.backend.repository.UserRepository; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;Service // spring bean public class UserService implements IUserService {AutowiredUserRepository userRepository;Overridepublic User add(UserDto user) {User userPojo new User();BeanUtils.copyProperties(user, userPojo);return userRepository.save(userPojo);}Overridepublic User getUser(Integer userId) {return userRepository.findById(userId).orElseThrow(() - {throw new IllegalArgumentException(用户不存在参数异常);});}Overridepublic User edit(UserDto user) {User userPojo new User();BeanUtils.copyProperties(user, userPojo);return userRepository.save(userPojo);}Overridepublic void delete(Integer userId) {userRepository.deleteById(userId);}Overridepublic ListUser getAll() {return (ListUser)userRepository.findAll();} } 代码分析与注释总结 以下是代码中注释的作用与详细解释 1. 类级别注解 Service 作用将该类标记为一个 Spring 服务层组件。功能 表示该类是业务逻辑层的组件Service Bean由 Spring 容器管理。通过依赖注入如 Autowired可以在控制器或其他组件中调用服务层逻辑。 2. 成员变量注解 Autowired 作用对 UserRepository 进行自动注入。功能 Spring 容器会将 UserRepository 的实现类由 Spring Data JPA 自动生成的代理类注入到 userRepository 中。用于提供数据库操作方法如 save、findById、deleteById 等。 3. 方法实现分析 add(UserDto user) 作用新增一个用户。 功能 创建一个空的 User 对象实体类。使用 BeanUtils.copyProperties 复制 UserDto 对象的属性值到 User 对象中。调用 userRepository.save() 将用户数据保存到数据库。返回保存后的 User 对象。 关键点 BeanUtils.copyProperties(source, target) Spring 提供的工具类用于将一个对象的属性值快速复制到另一个对象中。需要确保属性名称和类型一致。 userRepository.save() Spring Data JPA 提供的方法用于新增或更新数据库记录。如果实体没有主键值则新增如果有主键值则更新。 getUser(Integer userId) 作用根据用户 ID 查询用户。 功能 调用 userRepository.findById(userId) 查询用户。如果用户不存在则抛出 IllegalArgumentException提示用户不存在。如果用户存在返回查询到的 User 对象。 关键点 findById(userId) 返回一个 Optional 对象避免直接返回 null。 .orElseThrow() 当 Optional 中没有值时抛出指定的异常。 edit(UserDto user) 作用编辑用户信息。 功能 创建一个空的 User 对象。使用 BeanUtils.copyProperties 将 UserDto 的属性复制到 User 对象中。调用 userRepository.save() 更新用户信息。返回更新后的 User 对象。 关键点 编辑和新增的逻辑非常相似区别在于 新增时主键值为 null会新增一条记录。编辑时需要确保传入的对象有主键否则会新增而不是更新。 delete(Integer userId) 作用根据用户 ID 删除用户。 功能 调用 userRepository.deleteById(userId) 删除指定用户。 关键点 deleteById(userId) Spring Data JPA 提供的方法根据主键删除对应的记录。如果记录不存在不会抛出异常取决于底层数据库实现。 getAll() 作用查询所有用户。 功能 调用 userRepository.findAll() 查询所有用户。将结果转换为 ListUser 并返回。 关键点 findAll() 返回一个 Iterable可以通过 (ListUser) 强制转换为列表。 强制转换是因为 CrudRepository 默认返回 Iterable而业务通常需要 List。 4. 代码逻辑总结 方法功能一览 方法名称功能描述add(UserDto user)新增一个用户将 UserDto 转换为 User 并保存。getUser(Integer userId)根据用户 ID 查询用户不存在则抛出异常。edit(UserDto user)编辑用户信息将传入的 UserDto 更新到数据库中。delete(Integer userId)根据用户 ID 删除用户。getAll()查询所有用户返回用户列表。 5. 注意点 BeanUtils.copyProperties 的使用 简化了对象之间的属性赋值但需要注意 属性名和类型必须一致否则会跳过不匹配的字段。可能会忽略嵌套对象的处理例如复杂对象内的字段不会自动复制。 异常处理 在 getUser 方法中使用 orElseThrow 抛出异常保证调用方法时不会出现空指针问题。可以根据业务需求定义自定义异常类代替 IllegalArgumentException提高可读性。 数据类型转换 getAll 方法中findAll 返回的是 Iterable需要手动转换为 List。强制类型转换可能会出现问题建议直接用 Stream 或工具类进行转换。 为什么在业务开发中 Service 层需要定义一个接口 在业务开发中通常会为 Service 层定义一个接口如 IUserService然后通过实现类如 UserService实现该接口。这种设计并不是强制性的但它遵循了良好的软件设计原则带来了许多实际的好处。 1. 遵循面向接口编程的原则 面向接口编程 是软件设计中的重要原则强调程序应依赖于抽象接口而不是具体的实现类。好处 服务调用者控制器或其他服务只需要知道接口的方法而不需要关心具体实现。使代码更加灵活和解耦方便后续拓展和维护。 dto 不难发现我们在编写代码的时候发现使用到了一个中间变量 也就是还是用于传输的变量以下是定义 package com.jiaowu.backend.pojo.dto;import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import org.hibernate.validator.constraints.Length;public class UserDto {public String getName() {return name;}public void setName(String name) {this.name name;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}public String getEmail() {return email;}public void setEmail(String email) {this.email email;}public Integer getId() {return id;}public void setId(Integer id) {this.id id;}private Integer id;NotBlank(message 用户名不能为空)private String name;NotBlank(message 密码不能为空)Length(min 6,max 12)private String password;Email(message 邮箱格式不正确)private String email;Overridepublic String toString() {return UserDto{ name name \ , password password \ , email email \ };} }1. 简介 UserDto 是一个 数据传输对象Data Transfer Object, DTO用于在客户端和服务端之间传递用户数据。 DTO 的主要职责是 封装用户的请求数据如新增或编辑用户时的输入。提供输入验证功能确保数据的合法性。 2. 字段分析 1. private Integer id 解释id 是用户的唯一标识用于编辑或删除用户时的主键。注意在新增用户时通常不需要传递 id此字段在某些场景下可能为空如新增用户。 2. NotBlank(message 用户名不能为空) 作用 用于验证 name 字段不能为空或全是空格。如果用户未提供 name会抛出验证异常返回自定义错误信息。 适用场景新增或编辑用户时用户名为必填项。 3. NotBlank(message 密码不能为空) 作用 验证 password 字段不能为空或全是空格。 额外验证Length(min 6, max 12) 限制密码长度必须在 6~12 个字符之间。 适用场景新增用户或更新密码时。 4. Email(message 邮箱格式不正确) 作用 验证 email 是否符合邮箱格式。如果用户提供的邮箱格式不正确则返回错误信息。 适用场景新增或编辑用户时。 字段验证总结 字段名验证注解描述id无主键字段可为空新增时。nameNotBlank用户名不能为空或全是空格。passwordNotBlank Length(6, 12)密码不能为空长度必须在 6~12 个字符之间。emailEmail检查邮箱格式是否合法。 3. 常用方法分析 Getter 和 Setter 方法 作用提供对私有字段的访问和修改。优点 提供封装保护字段的直接访问。允许对字段的访问进行控制如添加逻辑验证。 改进建议 可使用 Lombok 简化代码自动生成 Getter 和 Setter 方法减少代码冗余。 toString 方法 作用 重写了 toString 方法用于输出对象的字符串表示。在调试或日志打印时便于查看对象内容。 改进建议 使用 Lombok 的 ToString 注解简化代码。 为什么要使用dto的变量而不是直接使用原来的user呢 在开发中DTO数据传输对象Data Transfer Object常用于 数据传输特别是在控制器层Controller和服务层Service之间传递数据而不是直接使用实体类如 User。 这种设计是一种 分层架构的最佳实践能够提高代码的灵活性、安全性和可维护性。以下是详细原因和优点 1. 职责分离 实体类的职责 实体类如 User通常是直接与数据库表映射的类通过 JPA 或 Hibernate 等 ORM 框架。它的主要职责是反映数据库结构如字段和处理持久化逻辑。 DTO 的职责 DTO 的职责是用来封装和传递客户端请求或响应的 数据结构。它关注的是 数据传输而不是数据库操作或业务逻辑。 好处 分离了数据传输逻辑和持久化逻辑。使 数据库模型 和 数据传输格式 之间解耦避免直接暴露数据库模型的结构。 2. 避免暴露实体类的敏感信息 实体类中可能包含一些敏感信息或不需要暴露给客户端的数据如密码的哈希值、数据库主键等。 直接使用实体类会导致以下问题 无法控制哪些字段可以被客户端访问或修改。如果实体类字段较多可能会导致不必要的数据暴露。 统一异常处理 后端处理出现了异常的时候通常是不用将这个异常情况反馈给前端的所以我们这里可以定义一个统一的异常处理类来进行返回统一异常信息 package com.jiaowu.backend.exception;import com.jiaowu.backend.pojo.ResponseMessage; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice;RestControllerAdvice //统一处理 public class GlobalExceptionHanderAdvice {// 记录日志Logger log LoggerFactory.getLogger(GlobalExceptionHanderAdvice.class);ExceptionHandler({Exception.class})public ResponseMessage handleException(Exception e, HttpServletRequest request, HttpServletResponse response) {log.error(e.getMessage(), e);return new ResponseMessage(500,error,null);} } 简介 功能 GlobalExceptionHanderAdvice 是一个全局异常处理类用于捕获和处理应用程序中的异常。通过使用 RestControllerAdvice 注解可以拦截所有控制器方法中抛出的异常包括运行时异常并进行统一的处理。 为什么需要全局异常处理 提高代码的可维护性和一致性避免在每个控制器中重复编写异常处理逻辑。提供用户友好的错误响应统一异常格式便于前端解析和展示。记录详细的异常信息通过日志记录系统错误便于后续排查问题。 2. 代码功能分析 1. RestControllerAdvice 作用这是 Spring 提供的增强功能结合 ExceptionHandler 注解可以对所有 RestController 抛出的异常进行拦截和处理。特点 默认会拦截所有 REST API 请求中的异常。返回的对象会直接转化为 JSON 响应适合 RESTful 风格的接口。 2. ExceptionHandler({Exception.class}) 作用指定处理的异常类型此处捕获所有异常包括运行时异常。逻辑 记录异常日志通过 SLF4J 的 Logger 记录完整的异常堆栈信息。返回统一的错误响应构造 ResponseMessage 对象作为标准的错误响应。 3. 日志记录 Logger log LoggerFactory.getLogger(GlobalExceptionHanderAdvice.class) 通过 SLF4J 记录异常日志。log.error(e.getMessage(), e) 输出异常的详细信息包括错误消息和堆栈跟踪便于排查问题。 4. 返回对象ResponseMessage ResponseMessage 是一个封装类用于统一接口的响应格式。返回值示例{status: 500,message: error,data: null }小结 这里我们将SpringBoot框架的基本操作都做了一遍不难看出springboot开发需要用到大量的注释省去了开发人员的编写麻烦问题。
http://www.hkea.cn/news/14451290/

相关文章:

  • php网站建设实训报告做景观的网站
  • 大学校园门户网站建设策划方案网站
  • 网站建设服务器在国外如何打击公司网页制作哪家好
  • 浙江省住房和城乡建设局网站网站如何引导
  • 装修设计网站免费成品软件网站大全推荐
  • 如何做自己微网站国际学校网站建设
  • 南昌网站建设赣icp南昌wordpress告白墙
  • 郑州做网站优化的公司黑马程序员学费
  • 地方生活门户信息网站源码上国外网站的dns
  • 一级a做爰片付费网站有什么页游传奇平台好
  • 徐州网站建设photoshop软件
  • 网站建设的需求怎么写吉林电商网站建设
  • 做外贸网站网络网站网站怎么做的
  • 哪些网站可以做免费外贸开封网站优化公司
  • 齐河网站建设中小企业网站制作价格
  • 下列关于网站开发中网站上传做网站用vs还是dw
  • 网站域名 空间 是每年都要缴费吗网站构成要素
  • 池州建行网站一流的苏州网站建设
  • 做个电商网站多少钱网站静态化怎么做
  • 免费设计app的网站建设淘宝网站的建设情况
  • 建设银行杭州纪念币预约网站长沙网站设计流程
  • 为什么要做营销型的网站建设广州网站建设50强名单
  • 网站空间配置东莞哪里有做网站的
  • 做网站想要中立设计专业干货推荐网站
  • 微信手机网站三合一画册设计免费模板
  • 做医美设计的网站刷关键词指数
  • 朔州网站建设收费多少福州做公司网站
  • 搜搜网站收录wordpress .htaccess在哪里
  • 网站建设的工作描述自己怎么做装修网站
  • 自己做图片网站房子竣工验收在哪个网站查