正式进入业务功能开发
普通业务开发不再提及,仅总结开发中遇到的新技术。
使用Swagger时JWT令牌校验失败
登录一次,在前端获取到token,将令牌添加到Swagger页面全局参数中
新增员工时TODO:创建与修改人的id 如何动态添加此次登录id
通过ThreadLocal进行传递。
ThreadLocal
ThreadLocal 并不是一个Thread,而是Thread的局部变量。
ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。
在项目中已经封装了 ThreadLocal 操作的工具类:
public class BaseContext {
public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();
public static void setCurrentId(Long id) {
threadLocal.set(id);
}
public static Long getCurrentId() {
return threadLocal.get();
}
public static void removeCurrentId() {
threadLocal.remove();
}
}
在拦截器中解析出当前登录员工id,并放入线程局部变量中:
......
/将用户id存储到ThreadLocal
BaseContext.setCurrentId(empId);
......
最后,在需要的地方获取线程局部变量的值。
分页插件PageHelper
public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
// select * from employee limit 0,10
//开始分页查询
PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize());
Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);//后续定义
long total = page.getTotal();
List<Employee> records = page.getResult();
return new PageResult(total, records);
}
响应前端时时间字段格式错误(连续数字没有间断)
解决方式:
1). 方式一
在属性上加上注解,对日期进行格式化。繁琐,需要每一处都添加注解。
@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")
private LocalDateTime updateTime;
2). 方式二(推荐 )
消息转换器
在WebMvcConfiguration中扩展SpringMVC的消息转换器,统一对日期类型进行格式处理。
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
log.info("扩展消息转换器...");
//创建一个消息转换器对象
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
//需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据
converter.setObjectMapper(new JacksonObjectMapper());
//将自己的消息转化器加入容器中
converters.add(0,converter);
}
public class JacksonObjectMapper extends ObjectMapper {
//.......
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
//.......
}
}