每周总结:2020年01月第1周
Posted gabriel-y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每周总结:2020年01月第1周相关的知识,希望对你有一定的参考价值。
2020-01-02
1.‘‘想要对Web资源进行保护,最好的办法莫过于Filter,想要对方法调用进行保护,最好的办法莫过于AOP" --出自某篇博客
个人理解:
FIlter 是系统级别的拦截过滤 粒度粗
AOP是方法级别的拦截 细粒度
2.跨域问题:
目前前后端分离的项目,前端部署的服务器与后端项目部署的服务器的IP不同,难免会产生跨域问题,本质原因是浏览器的同源策略
解决方式:
1.JSONP(在代码中加入<Script>标签) 只支持Get请求
2.使用代理,先访问前端的服务器,然后转发到后端
3.CORS:W3C的协议, 将请求分为两类:简单请求和非简单请求,非简单请求会在请求头添加允许跨域同时发一个Optiona请求,确认是否发送成功
3.Idea插件
Idea 驼峰转换插件 CamelCase,将下划线转换为驼峰形式的代码,适合场景:数据库字段转换为Java对象的属性
插件名
快捷键:alt+shift+U
备注:Idea自带的大小写转换的快捷键是Ctrl+Shift+U,并不能转换驼峰形式
2020-01-04
推荐几本相关的理财书籍:
(财富) 穷爸爸富爸爸,财务自由之路;
(实操) 聪明的投资者,指数基金定投指南
(思想) 穷查理宝典
2020-01-04
Go语言基础学习
2020-01-07
Java8 CompletableFuture API学习
简化异步调用的使用,支持函数式编程
例如:
public CustomerTargetTrendVO customerTargetTrend(TargetTrendDTO targetTrendDTO) throws Exception { //构造查询条件 TrendQueryDTO queryDTO = buildTrendQueryDTO(targetTrendDTO); if (ObjectUtils.isEmpty(queryDTO)) { return new CustomerTargetTrendVO(); } log.info("TrendQueryDTO : [{}]", queryDTO); //下单客户数趋势 CompletableFuture<List<CustomerTargetTrendVO.OrdedCustomerItem>> ordedCustomerFuture = CompletableFuture.supplyAsync(() -> dmRptWgysEnterpriseSumMapper.countOrdCustomerTrend(queryDTO)) .thenApply(x -> JSON.parseArray(JSON.toJSONString(x), CustomerTargetTrendVO.OrdedCustomerItem.class)); //下单实际采购量趋势 CompletableFuture<List<CustomerTargetTrendVO.PurchaseAreaItem>> purchaseAreaFuture = CompletableFuture.supplyAsync(() -> dmRptWgysCustomerOrderDetailMapper.countPurchaseAreaTrend(queryDTO)) .thenApply(x -> JSON.parseArray(JSON.toJSONString(x), CustomerTargetTrendVO.PurchaseAreaItem.class)); //等待子线程任务完成 CompletableFuture.allOf(ordedCustomerFuture, purchaseAreaFuture).join(); //数据组装 List<CustomerTargetTrendVO.OrdedCustomerItem> dbOrdedCustomerList = ordedCustomerFuture.get(); List<CustomerTargetTrendVO.PurchaseAreaItem> purchaseAreaList = purchaseAreaFuture.get(); return CustomerTargetTrendVO.builder().ordedCustomerList(dbOrdedCustomerList).purchaseAreaList(purchaseAreaList).build(); }
2020-01-07
插件:
Idea插件 Ace Jump
可以任意跳转至当前页面的任意位置 alt+K 或者alt+;
2020-01-09
项目中数据处理的问题
Java后端返回给前端的数值太大(如Long类型或者BigDecimal类型),导致前端显示数据时精度丢失的问题,
解决方式:
后端将以上数据转换为字符串返回给前端,可以使用统一的序列化器
@Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { /** * Date格式化字符串 */ private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); /** * DateTime格式化字符串 */ private static final DateTimeFormatter DATETIME_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); /** * Time格式化字符串 */ private static final DateTimeFormatter TIME_FORMAT = DateTimeFormatter.ofPattern("HH:mm:ss"); @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { super.configureMessageConverters(converters); final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = converter.getObjectMapper(); // 反序列化失败 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // long 转换为字符串 SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); // 浮点型使用字符串 simpleModule.addSerializer(Double.class, ToStringSerializer.instance); simpleModule.addSerializer(Double.TYPE, ToStringSerializer.instance); simpleModule.addSerializer(BigDecimal.class, ToStringSerializer.instance); // java8 时间格式化 simpleModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DATETIME_FORMAT)); simpleModule.addSerializer(LocalDate.class, new LocalDateSerializer(DATE_FORMAT)); simpleModule.addSerializer(LocalTime.class, new LocalTimeSerializer(TIME_FORMAT)); objectMapper.registerModule(simpleModule); // 为mapper注册一个带有SerializerModifier的Factory,处理null值 objectMapper.setSerializerFactory(objectMapper.getSerializerFactory() .withSerializerModifier(new CustomizeBeanSerializerModifier())); // 处理中文乱码问题 converter.setSupportedMediaTypes(ImmutableList.of(MediaType.APPLICATION_JSON_UTF8)); converter.setObjectMapper(objectMapper); converters.add(converter); converters.add(new StringHttpMessageConverter(StandardCharsets.UTF_8)); } }
2020-01-10
1.Bug:
今天在写mybatis XML文件时,在XML文件中注释了一段旧的SQL,然后打包部署以后,注释的字段#{xxx.属性} 报错 属性 is no getter .... ,
但是实际这个属性不在项目中,当把注释删除掉以后再重新打包部署,代码正常运行,很奇怪
2.BigDecimal数据处理问题
两个Double类型的数字相除并且保留两位小数,然后通过BigDecimal的构造方法转成BigDecimal对象,然后返回给前端时仍然会出现精度丢失的情况
解决办法:
将最终要传递给前端的BigDecimal对象,转换成字符串 String.valueOf(BigDecimal对象)
以上是关于每周总结:2020年01月第1周的主要内容,如果未能解决你的问题,请参考以下文章