苍穹外卖-DAY03
1.公共字段自动填充
apo切面编程实现
注解的value
- 方法即属性:在注解中,定义的“无参方法”其实是配置项(属性)。
OperationType value(); 的意思是:“请在使用我时,填入一个 OperationType 类型的对象”。
value 的特权:这是 Java 的语法糖。
- 因为名字叫
value,且没有其他属性需要赋值,所以你可以简写。
- 简写:
@AutoFill(OperationType.INSERT)
- 全写:
@AutoFill(value = OperationType.INSERT)
- 类型安全:返回值类型规定为
OperationType,是为了防止你乱填(比如填个字符串),编译器会强制检查。
2.新增菜品
文件上传功能实现
D:\小川\code\项目\sky-take-out\sky-server\src\main\resources\application.yml文件配置
D:\小川\code\项目\sky-take-out\sky-server\src\main\resources\application-dev.yml文件具体配置属性
D:\小川\code\项目\sky-take-out\sky-common\src\main\java\com\sky\properties\AliOssProperties.java制作属性类自动导入
D:\小川\code\项目\sky-take-out\sky-server\src\main\java\com\sky\config\OssConfiguration.java制作配置类实现自动注入
D:\小川\code\项目\sky-take-out\sky-server\src\main\java\com\sky\controller\admin\CommonController.javaController层代码使用自动注入,导入工具类
事务锁处理
启动类上注解@EnableTransactionManagement
之后再多次处理数据库表时添加锁事务管理
数据库插入后返回主键值
在执行插入语句标签加入下面代码
1
| <insert id="insert" useGeneratedKeys="true" keyProperty="id">
|
即可将插入类的id属性赋值为返回主键
之后通过类getId获取
3.修改菜品
这一块我手欠安装了一个Actuator,这个监控程序与我项目的springboot版本不同,会导致特别大的问题,一堆报错,真是绷不住了
解决方式如下
创建一个Knife4jConfig.java这样的配置类,可以“拦截”下 Swagger 的扫描器,强行把那些使用 PathPatternParser 的映射(也就是 Actuator 搞出来的那些会导致报错的映射)从 Swagger 的扫描列表中剔除掉。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| package com.sky.config;
import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.ReflectionUtils; import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;
import java.lang.reflect.Field; import java.util.List; import java.util.stream.Collectors;
@Configuration public class Knife4jConfig {
@Bean public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { return new BeanPostProcessor() {
@Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); } return bean; }
private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) { List<T> copy = mappings.stream() .filter(mapping -> mapping.getPatternParser() == null) .collect(Collectors.toList()); mappings.clear(); mappings.addAll(copy); }
@SuppressWarnings("unchecked") private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) { try { Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); field.setAccessible(true); return (List<RequestMappingInfoHandlerMapping>) field.get(bean); } catch (IllegalArgumentException | IllegalAccessException e) { throw new IllegalStateException(e); } } }; } }
|