Spring问题集合

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
SpringContextUtilcn.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
MapUtilsmap工具类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的启动方法

  1. 系统管理→流程管理→工作流配置→工作流定义→下载
  2. 下载好的文件右键用notepad++打开→修改地址→两处(服务地址)
  3. 用cmd打开→cd到文件路径下→javaws “名称”
  4. jdk路径c://Program File\Java\jre1.8.0_20\bin
  5. 控制面板→所有控制面板项→Java→安全→站点→网址
  6. 切换盘符→直接输入盘符加冒号就行,如: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,运行程序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值