《-----------------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