2.开发流程-员工操作

开发流程-员工操作:

公用操作:

  • 需要使用默认值时,设置一个公共类,在里面设置对应的常量,方便日后维护;

  • 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对象的addSerializeraddDeserializer方法来自定义序列化器和反序列化器;
  • 使用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():用于根据指定的模式字符串创建一个日期时间格式化器;

注意:

  • WebMvcConfigurationSupportWebMvcConfigurer用法差不多;
posted @ 2024-06-01 11:33  回家太晚太悲催  阅读(19)  评论(0)    收藏  举报