1、将map转换成指定对象并且进行非空校验
package com.wuyl.helloword.service;
import com.alibaba.fastjson.JSON;
import org.apache.commons.collections4.CollectionUtils;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class JsonTest {
public static void main(String[] args){
Map<String,Object> orgInfo = new HashMap<>();
orgInfo.put("orgName","机构名称");
orgInfo.put("orgAddr","机构地址");
//转换成指定对象
OrgDto orgDto = JSON.parseObject(JSON.toJSONString(orgInfo), OrgDto.class);
//校验
Set<ConstraintViolation<OrgDto>> validResults = Validation.buildDefaultValidatorFactory().getValidator().validate(orgDto);
//输出
if (CollectionUtils.isNotEmpty(validResults)){
String message = validResults.stream().map(ConstraintViolation::getMessage).reduce((m1, m2)-> m1 +";"+ m2).orElse("参数输入有误");
System.out.println(message);
}
}
}
package com.wuyl.helloword.service;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
@Data
public class OrgDto {
@NotEmpty(message = "机构名称不能为空")
private String orgName;
@NotEmpty(message = "机构地址不能为空")
private String orgAddr;
@NotEmpty(message = "机构编号不能为空")
private String orgNum;
}
如果报这个错误:Unable to create a Configuration, because no Bean Validation provider could
是缺少依赖,pom.xml 增加
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
结果输出:机构编号不能为空
validResults的值为: ConstraintViolationImpl{interpolatedMessage='机构编号不能为空', propertyPath=orgNum, rootBeanClass=class com.wuyl.helloword.service.OrgDto, messageTemplate='机构编号不能为空'}
2、进行非空校验
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidatorFactory;
import java.util.Set;
import java.util.Iterator;
public static <T> String validateEntity(T t) {
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Set<ConstraintViolation<T>> validate = validatorFactory.getValidator().validate(t);
Iterator<ConstraintViolation<T>> iterator = validate.iterator();
while (iterator.hasNext()) {
ConstraintViolation<T> next = iterator.next();
return next.getMessage();
}
return null;
}
3、Spring获取指定的bean
//第一步:创建接口
public interface ProductInterface {
public void saveResult(String prodNum);
}
//第二步:实现接口
@Service("ProdCarImpl")
public class ProdCarImpl implements ProductInterface {
@Override
public void saveResult(String prodNum) {
System.out.println("当前产品是汽车类");
}
}
//第三步:类型赋值
//方法一
import cn.com.yusys.yusp.commons.util.SpringContextUtil;
ProductInterface prodImpl = SpringContextUtil.getBean("ProdCarImpl");
//方法二
@Component
public class ProductFacorty{
@Autowired
private Map<String, ProductInterface> productImpl;
pubic ProductInterface getProductImpl(String beanName){
return productImpl.get(beanName);
}
}
//方法三
@Component
public class ProductFacorty{
@Autowired
@Qualifier("ProdCarImpl")
private ProdCarImpl prodCarImpl;
pubic ProductInterface getProductImpl(String prodNum){
ProductInterface productImpl = null;
if("car001".equals(parodNum)){
productImpl = prodCarImpl;
}
retrurn productImpl;
}
}
//第四步:方法调用
prodImpl.saveResult("car001");
4、Java的null的应用
null是关键字,NULL不是关键字。Java区分大小写,并且所有的关键词都是小写。
compareTo()方法是用于比较两个对象的大小,如果传入null值,由于null不能与任何对象比较大小,null不等于任何对象,所有向compareTo()方法传入null值会出现空指针异常;但是equals()方法是用于比较了两个对象是否相等,等equals()方法传入参数为null时,怕段字符串时候为空,所以equals()方法可以传入null,但是不能适用null.equals("字符串")。
5、码值转换
//码值转换从其他服务转到微服务
lookupMapServie.mapItemCode(@RequestParam("srLookupCode") String paramString1, @RequestParam("srLookupItemCode") String paramString2, @RequeatParam("srSystem") String paramString3)
举例
lookupMapService.mapItemCode("DIC_CUST_TYPE", loanCtrtInfo.getCustTypeCd(), "UCMS").getLookupItemCode();
//码值转换从微服务转到其他服务
lookupMapServie.mapSurrondItemCode(@RequestParam("lookupCode") String paramString1, @RequestParam("lookupItemCode") String paramString2, @RequeatParam("srSystem") String paramString3)
举例
lookupMapService.mapItemCode("DIC_CUST_TYPE", loanCtrtInfo.getCustTypeCd(), "UCMS").getSrLookupItemCode();
6、映射,把本没有值的字段赋值
CtrtLoanInfo ctrtloanInfo = new CtrtLoanInfo();
TranslateService.translate(ctrtloanInfo);
配合注解@Translator
@Autowired
private ValueTransLatorService translateService;
List<CrdtAply> dataList = new ArrayList<>();
translateSrvice.translate(dataList);
@ApiModelProperty("客户经理工号")
private String custMagrNum;
@ApiModelProperty("客户经理名称")
@Translator(form="custMagrNum",translator=ValueTranslatorConstants.LOGIN_NAME)
//@Transient
private String custMagrName;
@Transient 注解是对象字段和表字段无法映射时用的,代表当前字段不用和表一一映射。
7、常用方法
类名 | 描述 | 类路径 |
---|---|---|
DateUtil | 日期相关 | cn.com.yusys.yusp.commons.util.DateUtil |
SpringContextUtil | cn.com.yusys.yusp.commons.util.SpringContextUtil | |
CollectionUtils | 集合相关 | org.apache.commons.collections4.CollectionUtils |
StringUtil | 字符串相关 | cn.com.yusys.yusp.commons.util.StringUtil |
StringUtils | 字符串相关 | org.apache.commons.lang3.StringUtils |
MapUtils | map工具类 | org.apache.commons.collections4mMapUtils |
BeanUtils | 类的工具类 | org.springframework.beans.BeanUtils |
JSONObject | 格式转换工具类 | com.alibaba.fastjson.JSONObject |
IOUtils | 数据流相关 | org.apache.poi.util.IOUtils |
8、服务启动顺序
注册中心→认证中心→网关
9、测试网络连通性
- telnet ip port
- curl ip:port
- wget ip:port
10、代码自动构建
需要在core文件夹的pom.xml文件中 增加版本号,格式如下:
<groupId>com.nrcs</groupId>
<artifactId>nrcs-busi-core</artifactId>
<description>nrcs-busi-core微服务工程</description>
<version>2.1.2-SNAPSHOT</version>
<packaging>jar</packaging>
11、echine的启动方法
- 系统管理→流程管理→工作流配置→工作流定义→下载
- 下载好的文件右键用notepad++打开→修改地址→两处(服务地址)
- 用cmd打开→cd到文件路径下→javaws “名称”
- jdk路径c://Program File\Java\jre1.8.0_20\bin
- 控制面板→所有控制面板项→Java→安全→站点→网址
- 切换盘符→直接输入盘符加冒号就行,如:E:
12、mybatis的sql打印
mybatis中的DML语言(insert、update、delete)当执行语句的时候Parameters:[1,_2,_3]。_代表空格,每一个参数都有空格,如果一个参数中有好几个逗号,可以用这个方法进行参数个数分析。
13、swagger的token问题
swagger用网关地址+“swagger-ui2.html”访问时有时会报401,token为null,这是token过期了,可以直接网关地址进行访问,如:http://10.0.0.1:8080/ 。登录时输入用户编号,在nrcs_sss.amdin_sm_user中的user_type字段,把状态改成2-看板用户。
14、启动SpringBoot项目时查看bean
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(LearningTestApplication.class, args);
String[] beanDefinitionNames = run.getBeanDefinitionNames();
Arrays.sort(beanDefinitionNames);
for (String beanDefinitionName : beanDefinitionNames) {
System.out.println(beanDefinitionName);
}
}
15、谷歌浏览器解决跨域问题 --disable-web-security --user-data-dir
1.关闭所有谷歌浏览器的页面
2.右键点击谷歌图标,找到属性 -> 快捷方式 -> 目标
在后面加上这句话: --disable-web-security --user-data-dir
--user-data-dir 浏览器存储用户配置文件的目录。设置存储个人信息的目录(必须)
注意:要有空格哦!!!。如果--user-data-dir后面不跟地址会自动默认为:C:\Users\用户名\AppData\Local\Google\Chrome\User Data\Default 因此可以在后面追加地址,列如--user-data-dir=D:\ChromeData 这样个人数据就好保存在D:\ChromeData\Default
D:\ChromeData是我自己随便找了个文件夹,可以自己随便配置,不这么写的话,新版本浏览器可能出现设置不生效的问题。
这个方式等于是用户在自己电脑创建了一套chrome的私有化浏览器,里边的设置配置等均为私有化设置。此时找到chrome安装源目录,打开chrome.exe,会发现,在私有chrome配置的所有书签,选项等,在这个chrome里都没有。
备注:如果要删掉D:\ChromeData,一定要先做书签、账号密码等的备份。一经删除,等于是把个人电脑里的私有chrome卸载了,数据都不会保留
3.再次打开谷歌浏览器,出现图片的情况就是成功了
4、地址栏输入 chrome://version/
可以看到,chrome相关信息
5、通过搜索:Chrome浏览器自定义设置个人信息存储路径 查看相关信息
16、谷歌浏览器加载postman
更多工具-拓展程序-开启开发者模式-加载已解压的拓展程序。然后再地址栏输入:chrome://apps 或者点击书签栏的“应用”菜单,单击Postman,运行程序