2020年3月的日常学习记录

《-----------------2020/3/23-------------------------------------------- 》

一、Mybatis mapper.xml 写判断case的SQL

where条件,根据type参数判断使用哪条where判断语句

    where
    case
    when #{type}='1' then ( u.account=#{account})
    when #{type}='2' then ( u.phone=#{account})
    else (  u.email=#{account}) end

if的使用情景

 <if test="email != null">
        email = #{email,jdbcType=VARCHAR},
 </if>

《-----------------2020/3/24-------------------------------------------- 》

一、调用mybatis insert()方法错误

报错信息
nested exception is java.sql.SQLException: Field 'id' doesn't have a default value

解决方法
要是mysql没有设置该字段的自增,那么使用此方法时需把useGeneratedKeys=“true” 去掉,insertSelective方法同

《-----------------2020/3/25-------------------------------------------- 》

一、使用feign调用service模块

报错信息
feign.codec.DecodeException: Type definition error: [simple type, class com.xuecheng.framework.domain.cms.response.CmsPageResult]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `
意思就是通过feign调用返回来的json数据无法转换为我定义的对象,因为我定义的对象实体无法进行反序列化。

解决方法:
1、 把接收的实体变为可反序列;
2、接收为String,然后再进行转换为对象;
**tips:abstract 抽象类无法反序列化~

二、Spring Cloud加载配置文件顺序

1.首先加载bootstrap.yml,配置有nacos服务注册中心就去加载nacos里的配置文件,动态把配置加载到application.yml,所以application.yml里只放一些固定的配置信息。mybatis的配置是放在mybatis-config.xml

三、自定义的全局的拦截器

@ControllerAdvice

四、java中类如何进行反射

1.通过类对象调用newInstance()方法,适用于无参构造方法:

 例如:String.class.newInstance()

2.通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,适用于无参和有参构造方法。

  例如:String.class.getConstructor(String.class).newInstance("Hello");   
       String.class.getDeclaredConstructor().newInstance(); 

《-----------------2020/3/26-------------------------------------------- 》

一、list添加一个对象的时候抛出NullPointerException

参考链接:https://www.cnblogs.com/ttflove/p/6033393.html

二、postman测试get与post的参数

@RequestBody:获取json格式提交的对象
@PathVariable:获取url路径的参数
@RequestParam :获取post请求时url路径的参数

使用post提交时,如果用 @RequestBody,那么参数以raw的json格式提交;如果用@RequestParam ,那么参数可以放在url路径,也可以放在form-data、x-www-form-urlencoded,所以@RequestBody和@RequestParam 最号不要同时使用,若使用只能把@RequestParam 的参数放在url路径里。

《-----------------2020/3/31-------------------------------------------- 》

一、使用feign解析对象错误

1、SuccessRespModel是个泛型

SuccessRespModel<TokenModel> successRespModel = authFeign.getToken(tokenParamsModel);

2、 Date参数无法转换,springMVC默认使用的是jackjson转换,在jackjson中未自定义Date需按照什么格式转换,所以自定义feign的json转换,使用的是fasrjson,新建一个类FeignConfig.java

@Configuration
public class FeignConfig {
    @Bean
    public ResponseEntityDecoder feignDecoder() {
        HttpMessageConverter fastJsonConverter = createFastJsonConverter();
        ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(fastJsonConverter);
        return new ResponseEntityDecoder(new SpringDecoder(objectFactory));
    }

    @Bean
    public SpringEncoder feignEncoder(){
        HttpMessageConverter fastJsonConverter = createFastJsonConverter();
        ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(fastJsonConverter);
        return new SpringEncoder(objectFactory);
    }

    private HttpMessageConverter createFastJsonConverter() {
        FastJsonHttpMessageConverter jsonDataConvert = new FastJsonHttpMessageConverter();

        FastJsonConfig config = jsonDataConvert.getFastJsonConfig();
        config.setCharset(StandardCharsets.UTF_8);
        config.setDateFormat("yyyy-MM-dd HH:mm:ss");
        config.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect,
                SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty,
                SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteNullNumberAsZero);

        ArrayList<MediaType> mediaTypes = new ArrayList<>();
        mediaTypes.add(MediaType.APPLICATION_JSON);
        jsonDataConvert.setSupportedMediaTypes(mediaTypes);

        return jsonDataConvert;
    }
}

二、设置数据传输的大小限制

max-request-size: 3MB
spring:
  http:
    encoding:
      enabled: true
      force: true
      charset: UTF-8
  servlet:
    multipart:
      max-request-size: 3MB

也可以在http的请求头里获取参数 content-length

三、在service方法前添加数据库事务

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值