Java问题记录

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。好处:代码冗余优化,修改字段繁琐优化等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值