1、Java中的泛型使用:在编译器不知道实际类型,运行时才知道:
泛型类:
public class Demo<T> {
...
}
静态泛型方法:
public static<T> Demo<T> getSomethin(){
return new Demo<T>;
}
2、Json序列化,如果要忽略某个方法或者属性,使用@JsonIgnore注解;如果要使返回值为NULL的属性不参与序列化,使用 @JsonInclude(JsonInclude.include.NON_NULL),可以作用于类上和属性上还有其他属性:
JsonInclude.Include.ALWAYS 默认
JsonInclude.Include.NON_DEFAULT 属性为默认值不序列化
JsonInclude.Include.NON_EMPTY 属性为 空(””) 或者为 NULL 都不序列化
JsonInclude.Include.NON_NULL 属性为NULL 不序列化
3、IDEA中 使用@autowire自动注入mapper的时候,编译器会报错,实际上是正常的,因为mybatis的扫描和spring的扫描策略不一样,强迫症解决方法:file -- setting -- editor -- Inspections -- spring --spring core -- code ,将autowiring for Bean class 改成waring,即可:
4、IDEA 启动debug项目时,Error running 'Tomcat 8.5.43': Unable to open debugger port (127.0.0.1:54982): java.net.BindExceptio:原因端口占用,解决方案是换一个端口,如下图:
5、通过@autowire 注入mapper,如果启动时,注入报错,找不到mapper,首先检查applicationContext.xml中的mapperScan 有没有配置,如果没有,配置如下;如果配置了,检查下包配置的对不对:
<bean name="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mall.dao"/>
</bean>
6、访问接口的时候,报错:java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonProcessingException ,
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
解决方案:spring 3 中,使用MappingJacksonHttpMessageConverter转换,spring 4 中,使用MappingJackson2HttpMessageConverter,要加一个2,
6、mybatis中使用mapper接口报错:There is no getter for property named 'name' in 'class java.lang.String':
解决方案:给接口中的参数添加@Param("para")注解,否则不识别,哪怕只有一个参数,也要传
7、用postman测试post接口,方法传参不是Json格式的时候,使用form-data形式无效,这时候要切换成x-www-form-urlencoded格式,后台就能收到这个参数了 :
这两种格式的区别:前者支持键值对和二进制文件形式,最终汇总成一个信息;后者是将表单内容转化成键值对形式,以&拼接:passWd=999&userName=admin
8、There is no getter for property named:传入的参数,在xml中无法获取,有以下情况:
- 一个基本类型参数:getUser(String userName) 这种写法,在xml中如果没有在if中使用这个参数,则是可以直接用#{userName}的;如果在if中要使用,则有2中处理方式:(1):给参数加@Param("userName")注解 (2):在if中使用参数名_parameter:
<if test="_parameter !=null and _parameter != ''"> and user_name = #{userName} </if>
- 多个参数:(1)使用@Param("")注解去区分 (2)不用注解,xml中使用:id = #{0} and name = #{1}
- 一个map:使用map中的key即可
9、接口中定义常量属性,可以直接使用String userName,在编译期的时候,会给自动加上static final 关键字;
10、MD5Util工具类,不可逆的非对称算法,常用加盐值的方法:自定义一个字符串拼接在密码前面,然后再进行MD5加密,这样就没有办法破解了 。
11、Tomcat启动日志乱码:TOMCAT 27-Aug-2019 17:46:10.789 淇℃伅
解决方案:找到Tomcat目录下的conf/logging.properties配置文件,打开,搜索java.util.logging.ConsoleHandler.encoding,将uft-8改为GBK即可;
12、java 类中的快执行顺序:静态代码块 > 普通代码块 > 构造代码块 ;静态代码块通常用来初始化静态成员变量,在类加载的时候初始化一次;
13、lombok原理:在编译的时候通过lombok的处理器,对要编译的文件的语法树进行修改,如果有@data注解,则在语法树中添加getter和setter方法,然后再生成字节码文件class。好处:代码冗余优化,修改字段繁琐优化等