开发流程-员工操作:
公用操作:
-
需要使用默认值时,设置一个公共类,在里面设置对应的常量,方便日后维护;
-
TODO注释:// TODO表示该功能还未做好,先标记下来;
-
BeanUtils:Spring中的对象工具类:
- BeanUtils.copyProperties(参数一,参数二):对象属性拷贝,将参数一中与参数二相同的属性名,拷贝到参数二中的属性里;
-
DigestUtils:Spring中的加密算法类:
- DigestUtils.md5DigestAsHex(参数一):将参数一进行md5加密;参数一是字节数组,使用字符串.getBytes()将字符串转换为字节数组;
-
异常处理:
- 创建一个类,为这个类添加@RestControllerAdvice注解;
- 在类中添加对应方法,将该方法添加@ExceptionHandler(异常的class)注解,表示处理什么异常;
ThreadLocal:
- 本地线程,为每个线程提供一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问;
- 使用ThreadLocal中的set,get方法来实现跨类,跨方法的传递变量;
- 需要先创建对应的对象,new ThreadLocal()
- 常用方法:
- public void set(T value):设置当前线程的线程局部变量的值;
- public T get():返回当前线程对象的线程局部变量的值;
- public void remove():移除当前线程的线程局部变量;
- 最好将其定义在一个工具类中;
WebMvcConfigurationSupport:
概念和作用:
- 这个类属于抽象类;需要被继承使用;
- 实现类需要添加@Configuration注解;
- 添加自定义的拦截器;
- 配置消息转换器;
- 配置视图解析器;
- 配置资源处理器;
- 将上述这些方法写在同一个实现类中;
自定义拦截器:
方法:
- 继承WebMvcConfigurationSupport类,重写addInterceptors方法;
- 使用方法中的参数调用拦截器的方法,如:
- addInterceptor("需要指定的拦截器"):指定需要使用的拦截器;
- addPathPatterns("需要拦截的路径"):指定需要理解的路径;
- excludePathPatterns("不需要拦截的路径"): 不需要拦截哪些资源;
拦截路径:
拦截路径 | 含义 | 举例 |
---|---|---|
/* | 一级路径 | 能匹配/depts, /emps, /login, 不能匹配/depts/1 |
/** | 任意级路径 | 能匹配/depts, /depts/1, /depts/2 |
/depts/* | /depts下的一级路径 | 能匹配/depts/1, 不能匹配/depts/1/2, /depts |
/depts/** | /depts下的任意级路径 | 能匹配/depts, /depts/1, /depts/1/2, 不能匹配/emps/1 |
配置消息转换器:
使用:
- 继承WebMvcConfigurationSupport类,重写extendMessageConverters方法;
- 在方法体内创建一个消息转换器对象;如:
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
- 为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据;如:
converter.setObjectMapper(对象转换器)
- setObjectMapper方法:设置对象转换器;
- 将自己的消息转换器对象加入容器;如:
converters.add(0,converter);
例子:
@Configuration
public class MyWebMvcConfig extends WebMvcConfigurationSupport {
@Override
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
// 创建一个消息转换器对象
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
// 为消息转换器设置一个对象转换器,对象转换器可以将java对象序列化为json数据
converter.setObjectMapper(new JacksonObjectNapper());
// 将自己的消息转换器加入容器中
converters.add(0,converter);
}
}
对象转换器:
概念:
- 对象转换器需要继承ObjectMapper类;
- 在Java中,继承
ObjectMapper
类可以让我们自定义JSON序列化和反序列化的行为;
使用:
- 在该实现类中的无参构造里,创建一个SimpleModule对象
- 使用SimpleModule对象的addSerializer和addDeserializer方法来自定义序列化器和反序列化器;
- 使用
this.registerModule(SimpleModule对象)
来将自定义序列化器和反序列化器添加进去;
序列化和反序列化:
概念:
- JSON序列化:将Java对象转换为JSON字符串;
- JSON反序列化:将JSON字符串转换回Java对象的过程;
SimpleModule方法:
-
addSerializer(参数一,参数二):将Java对象转换为JSON字符串;为JSON序列化器;
-
addDeserializer(参数一,参数二):将JSON字符串转换回Java对象的过程;为JSON反序列化器;
-
参数一:需要要序列化或反序列化的类的类型,如:
LocalDateTime.class
-
参数二:自定义的序列化器或反序列化器,一般为对应类型后加Serializer/Deserializer,如:
new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"))
; -
DateTimeFormatter.ofPattern():用于根据指定的模式字符串创建一个日期时间格式化器;
注意:
- WebMvcConfigurationSupport和WebMvcConfigurer用法差不多;