原来写的代码被CTO抓出来吐槽,发现确实都是一些当初自己没有注意到的地方,打算将这样的小细节一点一点的收集起来,养成更好的编码习惯。
Slf4j
The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time. 摘自https://www.slf4j.org/
在编写Spring的代码的时候,只需要在Class上方添加一个@Slf4j的注解即可。slf4j是facade pattern的典型例子(隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口,又被成为门面模式或者外观模式) 使用的时候,可以使用占位符的方式进行日志的记录,省去了原来自己拼接日志的麻烦。
log.debug("wxpushGet() returned: {}" ,result);
但是有一些需要注意的地方。
- 在日常开发调试的时候应该少用log.info(),而应该使用log.debug,不然在上线之后,就会产生很多冗余的信息。
- 只有在线上部署的时候,关键代码的信息,才使用log.info(),来显示日志的信息。千万不能滥用!
- 在catch的抛出错误的时候,使用log.error()。会打印错误以及异常的信息
- log.warn(),用于打印潜在的用户的错误可能的信息。
Dto等model的@Data注解
@Data注解,可以实现类的Getter和Setter的同时还有toString方法,没有必要自己再转一次Json(如果只是打印个日志的话),lombok生成的toString的可读性是很高的
Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO Plain Ordinary Java Object)。它通过注解实现这一目的。
Rest的post和get
rest风格不是随便使用get的(这是一个前辈给我说的,有次看了不少相关的文章和介绍,包括get和post到底有什么区别)
REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
今天前辈在看我的代码的时候,就问我为什么所有的都是get,说实话,当时的我真的是懵逼的。 我脑海中原来get和post区别大概如下:
- get请求要比post快
- get用户可以直接修改参数,post是将数据放在request body中,稍微安全一点
- get一般是用来请求数据
- post一般是用来发送数据
大概就是如上的内容了,然后在读完上面几篇文章后,又有了新的认识:
- get在浏览器回退的时候是无害的,而post会再次请求(应该就是返回上一页面的时候,get秒回,post会重新请求)
- get请求会被浏览器主动cache,而post不会,除非手动自己设置
- get请求只支持url的编码,而post支持多种编码的方式
- get请求的参数会被留在浏览器的历史记录当中,但是post不会
- get请求的参数有长度限制,但是post没有
- get只接受ASCII字符,而post没有限制
- get的参数会直接暴露在url上,因此不能用来传递敏感的信息
- get的参数通过url来传递,而post是直接放在request body当中的
上面的很多标准答案的概念,其实都是慢慢的通过人员长期使用形成了一部分思维定式,上面的文章之一的观点就有不同的见解:
- 给post加上url传参,给get加上request body,在技术上都是可以实现的,只是不能通过浏览器实现,但是并不是所有的网络服务都是通过浏览器来的
- 两者都是单纯的源于http协议,只有一丁点根本的区别,一个用于获取数据,一个用于修改数据
- get的长度限制,主要是浏览器服务器等,为了防止一些黑客的攻击来进行的限制,和get、post的无关。
- 可以在get的车里放data,也可以在post车外面放data,但是这样很蠢