一、SpringBoot全局异常处理
创建一个基本的springboot项目
编写一个简单地请求,然后在请求方法里写一个逻辑错误代码
package com.tcc.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @RequestMapping("test") public Object test() { int n = 1/0; // 0不能做除数,所以肯定会报错 return "测试成功"; } }运行项目,查看页面报错

编写全局异常的处理类,添加注解,如下:
package com.tcc.handler; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(RuntimeException.class) @ResponseBody public String exceptionHandler() { return "error"; } }添加完以后重启项目再次访问页面查看是否报错,结果如下:

其中涉及到的注解含义及用法如下 :
- @ControllerAdvice:该注解是 spring2.3 以后新增的一个注解,主要是用来为 Controller 的一些公共需 求的低侵入性增强提供辅助,作用于@RequestMapping 标注的方法上。
- @ExceptionHandler:该注解是配合@ControllerAdvice 一起使用的注解,可以自定义错误处理器,自行 组装 json 字符串,并返回到页面。
注意: 如果想实现不同的异常有不同的操作的话,只需要将 @ExceptionHandler 的 value 的值不一样就 可以了,可以同时实现多个不同的异常处理,但不能出现包含状态。
全局异常捕获的原理是: 使用 AOP技术,采用异常通知的方式处理。
二、SpringBoot异步执行
创建一个简单的springboot项目
创建一个task任务类
package com.tcc.task; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; @Component public class MyTask { @Async public String say() { try { Thread.sleep(5000); // 程序睡眠5秒后再执行 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("刚睡了5秒,醒了"); return "say"; } }编写controller调用任务类
package com.tcc.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.tcc.task.MyTask; @RestController public class SayController { @Autowired private MyTask task; @RequestMapping("test") public String say() { task.say(); //异步方法,这个方法不影响下面程序的正常执行 System.out.println("控制层输出"); return "欢迎使用springboot"; } }主方法上加上
@EnableAsync注解package com.tcc; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; @EnableAsync @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
解释:
当没有添加
@Async和@EnableAsync注解时,这就是个普通的方法,当发起请求时,请求里的方法就会等task.say()方法执行完毕以后再执行下面的语句。当添加这两个注解以后,
task.say()方法就会变成异步方法,当发起请求时,请里的方法不管task.say()方法是否执行完毕,下面的方法都会正常执行。
三、SpringBoot整合Lombok
去官网下载
lombok.jar包,官网: Download (projectlombok.org)打开lombok.jar所在的文件夹,按住shift+鼠标右键,选择->在此处打开powershell窗口
在窗口中写入
java -jar lombok.jar点击回车
一般的都会自动扫描到软件然后点击
Install/Update按钮安装如果没有扫描到,则点击
specify location...按钮
选择以后点击安装
安装成功以后,点击右下角退出

重启sts软件
创建一个简单的springboot项目,然后导入lombok依赖。
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>创建简单的实体类,然后添加lombok注解
package com.tcc.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class User { private int id; private String name; private String sex; private int age; }通过查看Outline查看是否自动添加了方法

lombok的常用注解:

四、SpringBoot整合Swagger2
添加依赖
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency>创建一个基本的spring,添加一个简单的业务
在启动类中添加
@EnableSwagger2注解在controller中添加api注解
package com.tcc.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.tcc.entity.User; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @Api //修饰整个类,描述 Controller 的作用 @RestController public class UserController { @ApiOperation("根据用户id获取用户") //描述一个类的一个方法,或者说一个接口 @RequestMapping("getUserById") public Object getUserById(@ApiParam("用户id")int id) { //单个参数描述0 User user = new User(id, "张三"); return user; } }启动项目,访问: http://localhost:8080/swagger-ui.html
常用注解
- @Api:修饰整个类,描述 Controller 的作用
- @ApiOperation:描述一个类的一个方法,或者说一个接口
- @ApiParam:单个参数描述
- @ApiModel:用对象来接收参数
- @ApiProperty:用对象接收参数时,描述对象的一个字段
- @ApiResponse:HTTP 响应其中1个描述
- @ApiResponses:HTTP 响应整体描述
- @ApiIgnore:使用该注解忽略这个 API
- @ApiImplicitParam:一个请求参数
- @ApiError :发生错误返回的信息
- @ApiImplicitParams:多个请求参数