本文最后更新于 292 天前,如有错误请邮件至 zhiligyi222na@gmail.com
编程软件
IDEA2023以上、Maven3.8、JDK21
创建Spring Boot工程
新建项目

删除无用文件

删除test目录
删除resource里面的static和template文件夹
精简pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.example</groupId>
<artifactId>springdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springdemo</name>
<description>springdemo</description>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
项目结构分析


target:是源码编译后的文件
pom.xml:定义Springbot的所有依赖项,springboot加载的时候会扫描这个文件的所有依赖项
SpringBoot里面内置了Tomcat
将application.properties重命名为application.yml
server:
port: 9999
启动Spring Boot工程
运行SpringdemoApplication.java启动springboot工程
写一个测试接口say:hello
controller/WebController.java
package org.example.springdemo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class WebController {
//表示这是一个Get请求的接口
@GetMapping("/hello") //接口路径,全局唯一
public String hello() {
return "Hello World!"; //接口的返回值
}
}
统一返回包装类Result
包装类:作用是统一后端返回的数据类型,code是作为前端判断请求成功的一句,msg是错误信息,data是返回给前端的数据
package org.example.springdemo.common;
public class Result {
private String code;
private Object data;
private String msg;
public static Result success(){
Result result = new Result();
result.setCode("200");
result.setMsg("请求成功");
return result;
}
public static Result success(Object data){
Result result = new Result();
result.setCode("200");
result.setData(data);
result.setMsg("请求成功");
return result;
}
public static Result error(String msg){
Result result = new Result();
result.setCode("500");
result.setMsg(msg);
return result;
}
public static Result error(String code, String msg){
Result result = new Result();
result.setCode(code);
result.setMsg(msg);
return result;
}
public String getCode() {
return code;
}
public Object getData() {
return data;
}
public String getMsg() {
return msg;
}
public void setCode(String code) {
this.code = code;
}
public void setData(Object data) {
this.data = data;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
500错误:常见的系统的错误

抛出这些错误非常不友好,我们应该使用统一的处理方式


全局异常处理器
GlobalExceptionHandler
package org.example.springdemo.exception;
import org.example.springdemo.common.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/*
* 全局异常捕获器
*/
@ControllerAdvice("org.example.springdemo.controller")
public class GlobalExceptionHandler {
private static final Logger log= LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(Exception.class)
@ResponseBody //将result对象转换成json的格式,返回出来
public Result error(Exception e){
log.error("系统异常", e);
return Result.error("系统异常");
}
}
自定义异常
CustomException
package org.example.springdemo.exception;
/**
* 自定义异常类
* 运行时异常
*/
public class CustomerException extends RuntimeException{
private String code;
private String msg;
public CustomerException(String code, String msg) {
this.code = code;
this.msg = msg;
}
public CustomerException(String msg) {
this.code = "500";
this.msg = msg;
}
public CustomerException() {}
public String getCode() {
return code;
}
public String getMsg() {
return msg;
}
public void setCode(String code) {
this.code = code;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
最终版全局异常
package org.example.springdemo.exception;
import org.example.springdemo.common.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/*
* 全局异常捕获器
*/
@ControllerAdvice("org.example.springdemo.controller")
public class GlobalExceptionHandler {
private static final Logger log= LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(Exception.class)
@ResponseBody //将result对象转换成json的格式,返回出来
public Result error(Exception e){
log.error("系统异常", e);
return Result.error("系统异常");
}
@ExceptionHandler(CustomerException.class)
@ResponseBody //将result对象转换成json的格式,返回出来
public Result customerError(CustomerException e){
log.error("自定义错误", e);
return Result.error(e.getCode(),e.getMsg());
}
}








