Java MD5加密与Swagger实战教程
2026/6/13 15:52:55 网站建设 项目流程

Java中MD5加密方法:不可逆

password = DigestUtils.md5DigestAsHex(password.getBytes());

Swagger使用方式

1.导入Knife4j的maven坐标

<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency>

2.在配置类中加入knife4j相关配置

@Bean public Docket docket() { ApiInfo apiInfo = new ApiInfoBuilder() .title("苍穹外卖项目接口文档") .version("2.0") .description("苍穹外卖项目接口文档") .build(); Docket docket = new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo) .select() //指定生成接口需要扫描到的包 .apis(RequestHandlerSelectors.basePackage("com.sky.controller")) .paths(PathSelectors.any()) .build(); return docket; }

3.设置静态资源映射,否则接口文档页面http://localhost:8080/doc.html无法访问

同样是在配置类中

protected void addResourceHandlers(ResourceHandlerRegistry registry) { log.info("开始进行静态资源映射..."); registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); }

Swagger常用注解:

新增员工功能开发:

controller层通过DTO封装数据

封装好后传给employeeService.save方法

EmployeeController:
@PostMapping @ApiOperation("新增员工") public Result add(@RequestBody EmployeeDTO employeeDTO) { log.info("新增员工,员工数据:{}", employeeDTO); employeeService.save(employeeDTO); return Result.success(); }

employeeService.save方法类中先对象属性拷贝

BeanUtils.copyProperties(employeeDTO,employee);

再将没有设计到的属性再封装给employee,封装好后调用Mapper持久层insert方法插入数据库

ThreadLocal的使用:

完善新增员工时,创建人id和修改人id设置为了固定值

新建工具类BaseContext:将ThreadLocal常用方法写入

package com.sky.context; 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(); } }

拦截器jwt校验令牌通过后获取登录员工id接着调用BaseContext工具类中ThreadLocal方法传入员工id,程序继续执行到controller,controller调用service层的save方法,save方法中调用工具类中getCurrentId方法:

//设置当前记录的创建人id和修改人id employee.setCreateUser(BaseContext.getCurrentId()); employee.setUpdateUser(BaseContext.getCurrentId());

员工分页查询功能实现:

pagehelper插件使用方法

先在pom文件引入依赖

<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${pagehelper}</version> </dependency>

在service实现层

public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) { //开始分页查询 PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize()); Page<Employee> page=employeeMapper.pageQuery(employeePageQueryDTO); long total = page.getTotal(); List<Employee> records= page.getResult(); PageResult pageResult = new PageResult(total,records); return pageResult; }

代码完善:处理数据格式

方式一:在Employee实体类属性上加入@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")注解

方式二:(扩展SpringMVC的消息转换器)

在配置类中编写一段代码,其中强调配置类WebMvcConfiguration extends WebMvcConfigurationSupport ,重写父类WebMvcConfigurationSupport 中的extendMessageConverters方法(统一对后端传给前端的数据进行转换处理),方法中创建消息转化器类MappingJackson2HttpMessageConverter(),

再为这个消息转换器对象指定一个对象转换器(可以将Java对象序列化为json数据)

在common模块下json包下JacksonObjectMapper直接创建出来(固定 代码)

protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { log.info("扩展消息转换器..."); //创建一个消息转换器对象 MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); //需要为消息转换器设置一个对象转换器,对象转换器可以将java对象序列化为json数据 converter.setObjectMapper(new JacksonObjectMapper()); //将自己的消息转化器加入容器中 converters.add(0,converter); }

对象转换器(JacksonObjectMapper)固定代码

package com.sky.json; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES; /** * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象] * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON] */ public class JacksonObjectMapper extends ObjectMapper { public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; //public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm"; public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss"; public JacksonObjectMapper() { super(); //收到未知属性时不报异常 this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false); //反序列化时,属性不存在的兼容处理 this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); SimpleModule simpleModule = new SimpleModule() .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))) .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))); //注册功能模块 例如,可以添加自定义序列化器和反序列化器 this.registerModule(simpleModule); } }

启用禁用员工账号:

编辑员工:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询