@RequestMapping("/test")@RestControllerpublic class TestController {@GetMapping("/add")public String add() {int a = 10 / 0;return "成功";}}
如果不做任何处理请求add接口结果直接报错:

文章插图
what?用户能直接看到错误信息?
这种交互方式给用户的体验非常差,为了解决这个问题,我们通常会在接口中捕获异常:
@GetMapping("/add")public String add() {String result = "成功";try {int a = 10 / 0;} catch (Exception e) {result = "数据异常";}return result;}
接口改造后,出现异常时会提示:“数据异常”,对用户来说更友好 。看起来挺不错的,但是有问题 。。。
如果只是一个接口还好,但是如果项目中有成百上千个接口,都要加上异常捕获代码吗?
答案是否定的,这时全局异常处理就派上用场了:
RestControllerAdvice
。@RestControllerAdvicepublic class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public String handleException(Exception e) {if (e instanceof ArithmeticException) {return "数据异常";}if (e instanceof Exception) {return "服务器内部异常";}retur nnull;}}
只需在handleException
方法中处理异常情况,业务接口中可以放心使用,不再需要捕获异常(有人统一处理了) 。真是爽歪歪 。4.类型转换器spring目前支持3中类型转换器:
- Converter<S,T>:将 S 类型对象转为 T 类型对象
- ConverterFactory<S, R>:将 S 类型对象转为 R 类型及子类对象
- GenericConverter:它支持多个source和目标类型的转化,同时还提供了source和目标类型的上下文,这个上下文能让你实现基于属性上的注解或信息来进行类型转换 。
Converter<S,T>为
例 。假如:接口中接收参数的实体对象中,有个字段的类型是Date,但是实际传参的是字符串类型:2021-01-03 10:20:15,要如何处理呢?第一步,定义一个实体User:
@Datapublic class User {private Long id;private String name;private Date registerDate;}
第二步,实现Converter
接口:public class DateConverter implements Converter<String, Date> {private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");@Overridepublic Date convert(String source) {if (source != null && !"".equals(source)) {try {simpleDateFormat.parse(source);} catch (ParseException e) {e.printStackTrace();}}return null;}}
第三步,将新定义的类型转换器注入到spring容器中:@Configurationpublic class WebConfig extends WebMvcConfigurerAdapter {@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverter(new DateConverter());}}
第四步,调用接口@RequestMapping("/user")@RestControllerpublic class UserController {@RequestMapping("/save")public String save(@RequestBody User user) {return "success";}}
请求接口时User对象中registerDate字段会被自动转换成Date类型 。5.导入配置有时我们需要在某个配置类中引入另外一些类,被引入的类也加到spring容器中 。这时可以使用
@Import
注解完成这个功能 。如果你看过它的源码会发现,引入的类支持三种不同类型 。
但是我认为最好将普通类和@Configuration注解的配置类分开讲解,所以列了四种不同类型:

文章插图
5.1 普通类这种引入方式是最简单的,被引入的类会被实例化bean对象 。
public class A {}@Import(A.class)@Configurationpublic class TestConfiguration {}
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Spring Cloud Consul 入门指引
- 怎样才能让馒头开花
- 让女朋友心动的句子
- 原神怎么让正机之神瘫痪
- 房子认筹号可以转让给他人吗
- 一个 dubbo 和 springboot 的兼容性问题
- 一篇文章带你掌握主流基础框架——Spring
- 【持久层框架】- SpringData - JPA
- 伴娘堵门讨红包技巧
- 怎么让酷狗在通知栏显示