第二周
1.@GetMapping、@PostMapping、@PutMapping、@DeleteMapping的区别
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping的区别 - 悠悠南山下 - 博客园 (cnblogs.com)
学了个新知识:幂等性👍
2.Unchecked call to 'PageInfo(List)' as a member of raw type 'com.github.pagehelper.PageInfo'
在使用pageInfo时警告:
Unchecked call to 'PageInfo(List
)' as a member of raw type 'com.github.pagehelper.PageInfo'
这是由于在new PageInfo()
方法没有写泛型,写了泛型后又警告:
Explicit type argument CommunityActivityProduction can be replaced with <>
隐式类型可以直接用<>
替代
3.swagger2忽略字段
方法一:@IgnoreSwaggerParameter
方法二:@ApiModelProperty(value = "XXX", required = false,hidden=true)
方法三:@ApiModelProperty(value = "XXX", required = false)
@JsonIgnore
* 方法三好像有个弊端,不能toJson
4.swagger2页面字段和接口注解中定义的不一样
-
第一个情况是因为马虎😂,在
@ApiImplicitParam
注解中的name
中某个字母小写了,导致它与接口中请求参数的值对应不上,所以swagger就给生成了两个,一个是注解手写的,一个是接口中的请求参数自动生成的 -
第二个情况是在
@ApiImplicitParam
注解中的name
多了个空格,导致对应不上
5.swagger2的接口过时标志
@Deprecated
6. Duplicate column name 'elderly_img_name'
sql查询的结果中出现了重复的列名字,在navicat中没报错,但是接口测试报错的原因是navicat这个软件,自动在重复的列名上加了(1)
7.cap.elderly_id = ?; LIMIT ?
项目使用了PageHelper分页插件,sql语句中不小心在语句末尾加了;
,所以就拼接错误了
8.用transient关键字标记的成员变量不参与序列化过程
9.请使用System.currentTimeMillis()代替new Date().getTime()
查看源码发现,原来调用的最终都是System.currentTimeMillis()
方法,而每次new
的操作比直接调用 System.currentTimeMillis()
多消耗了内存
public Date() {
this(System.currentTimeMillis());
}
10.JSONResult为什么要加泛型<T>
发现某个项目中返回前端的实体类中添加了泛型<T>
,如下:
public class JsonResult<T> implements Serializable {
}
了解了一下,这是正好搭配swagger使用,显示给前端看返回数据类型,T表示实体类,当实体类中有swagger的注解说明的时候,在调用返回前端的实体类的时候加入<实体类>,可以在swagger页面显示给前端返回前端的数据各是代表什么,当然这只是一个妙用。
泛型是用于约束的
11.java 泛型<E>
和<T>
以及?
的区别
Java泛型中的标记符含义:
E - Element (在集合中使用,因为集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
? - 表示不确定的java类型
S、U、V - 2nd、3rd、4th types
Object跟这些标记符代表的java类型有啥区别呢?
Object是所有类的根类,任何类的对象都可以设置给该Object引用变量,使用的时候可能需要类型强制转换,但是用使用了泛型T、E等这些标识符后,在实际用之前类型就已经确定了,不需要再进行类型强制转换。
12.Fields in a "Serializable" class should either be transient or serializable
transient,在序列化类中被修饰的字段不序列化
一个对象序列化时,按照Java默认的序列化规则,对象内的所有成员都要序列化,也就是说,这些Class都必须实现Serializable。
所以,你有两种改法,一是Address实现Serializable接口,二是对Person中的address成员加上transient
标记,这样该成员就不会被序列化进去