2018-6-13-采坑日记
SpringMVC:
1、良好开发习惯:SpringCloud框架下微服务之间的相互调用,可以先在Eureka上测试swagger接口,再在本地调用测试。
--->SpringCloud项目在yml文件中配置Eureka 地址,可以查看Swagger UI 。
2、字段的描述定义,可以查看对应数据库表字段定义描述。
3、可以借助https://www.bejson.com/进行json数据格式校验。
4、坑:sql查询语句 没有指定入参类型parameterType(没有入参),导致查询条件失效,造成全表查找。
常见bug:
2018-06-05 20:42:58.925 ERROR [http-nio-48233-exec-3] .s.i.CustomerServiceImpl [ 143]: getCustomerDetail error:nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4.
--->条件查询结果0-1个,全表查询4个。
良好习惯:select语句 加上入参(parameterType)和出参(resultMap)类型。
5、相同类型的变量才能相互赋值。
---->实际上是全限定类名相同。(同包下相同类)
eg:
com.test.ccs.user.dao.entity.CustomerPo
com.test.xxl.ccs.user.dao.entity.CustomerPo
不能相互赋值
典例:
entity bean 转换成service bean
6、Java对象之间相互转换,必须借助“工具方法”,不能像基本方法那样强制转换。
eg:
//对象转换 BeanUtils.copyProperties(addUserInfoBo, userInfoForm);
7、强行转型的前提,保证非空,避免空指针异常。
eg:
if(!StringUtils.isEmpty(registerInfo.getData(JSONObject.class).get("msspId"))){
String msspId = (String) registerInfo.getData(JSONObject.class).get("msspId");
}
8、打印日志是写代码的基本技能
--->通常会打印 方法的入参和出参。
eg:
对象参数打印: if(registerInfo != null){ logger.info("registerInfo==========:{}",JsonUtils.toJsonString(registerInfo)); }
logger.info("/approvalCustomer/resultBo==5=={}",resultBo.toString());
--->必须重写toString()方法。
eg:
public String toString() {
return JsonUtils.toJsonString(this);
}
打日志调试代码常用流程:
- 详细给接口入参出参打日志;
- 看日志:入参有问题,则报错:
- --->追踪页面传递的参数
- --->追踪页面调的接口(查看页面调用的接口)
- --->追踪接口查的的数据库(或者调的接口)
- --->最后查看数据库数据,逐层追踪。
9、restful接口前后端http传递方法保持一致,不一致可能会造成乱码
eg:
前端 GET方式, 后端POST方式, @RequestMapping(value = "/test/web/register",method = RequestMethod.POST)
造成乱码现象,无法成功传递数据。
10、Eureka Swagger Ui使用
<1> 开发集成环境:本地启动服务(或者部署到开发环境服务器),开发环境Eureka 发现本地服务,可以在Swagger Ui传参测试,同时可以本地与前端debug联调。
<2>测试环境:代码部署到测试环境启动服务,测试环境Eureka 发现服务,可以在Swagger Ui传参测试服务接口,一般测试人员常用。
--->一般应用服务器与Eureka服务器分离,应用服务器与Eureka服务器都考虑负载均衡,通过负载均衡机访问Eureka服务器。