
java
玉离骚
这个作者很懒,什么都没留下…
展开
-
FeignClient接口类用自定义注解添加统一的入参字段或者处理参数
远程调用第三方系统的接口,都需要传sign签字字段,而此字段一般是用密钥和入参根据约定的算法生成的字符串。为了代码简洁快捷,所以通过注解的方式去实现。题外话,若对方接口要求请求头里面有某个固定的参数,比如token,实现方法可参考如下。fegin接口调用此拦截。fegin调用demo。先创建一个请求拦截器。原创 2024-08-08 15:35:17 · 379 阅读 · 0 评论 -
阿里云服务器发送邮件失败 Could not connect to SMTP host: smtp.xxx.com, port: 465;
从提示看就是阿里云邮箱的465端口连接不上,一开始以为是阿里云禁止了465端口,所以在阿里云控制台的安全组里面给465端口都配置了入方向和出方向,但仍旧同样报错。阿里云服务器也不例外,但可以在阿里云控制台申请解封25端口,然而是小微服务器一般不给解封的,所以即使本地25端口也调试ok,也不考虑换25端口作为解决方向。这段代码本地ok,上阿里云服务器就连不通stmp+465,故而又从网上找了几个别人写的发送邮件的工具类代码,都是大同小异,结果也是本地ok阿里云服务器不行,着实让人有点蒙圈。原创 2024-06-07 23:08:24 · 3097 阅读 · 2 评论 -
java计算程序运行耗时的方法
有时候为了统计性能耗时,会写几行代码计算一个方法或者sql执行消耗多久时间,打印出日志分析。下面写了3种计算代码执行完所消耗时间的方法。(对于一些重要的业务场景需要监控的,可以把这个耗时结果写入数据量通过job去告警)原创 2024-01-15 15:06:00 · 3342 阅读 · 1 评论 -
上传文件大小限制报错
先看注解 @RequestPart 和 @RequestParam 都是可以的,问题不在这,在看 @RequestPart(“multfile”) 里面的multfile,postman的入参字段名称不填写或者填写的与后台接口的入参字段名称不一致也不会成功 会报错。上面ok后,上传一个大一点的文件报错信息如下, 1048576 bytes 大约是1M,也就是提示你上传最大限制1M文件。:去nginx的conf目录下,编辑nginx.conf文件里面的http{},在里面添加一行配置如下。原创 2023-11-09 16:27:37 · 1146 阅读 · 0 评论 -
请求返回参数公共部分设计
在些接口的时候, 对于某些入参在每个接口都出现的话(比如给PC、APP写的一堆接口,每个接口会包含请求渠道方名称、IP地址、版本、时间戳、签名等参数),可以抽取出来作为公共的参数,减少代码的冗余。java 的继承虽然不能多继承,但可以一层一层的继承。D继承C,C继承B,B继承A, 这样D也就有了A里面的属性方法.同样的,方案二也可以一层包一层比如。比如大部分表,有创建人/时间、更新人/时间等字段,这些也可以抽取出来,通过拦截器的方法去自动填充。公共参数放父DTO里面,每个接口的DTO继承这个父DTO。原创 2023-04-24 10:34:53 · 152 阅读 · 0 评论 -
拦截器实现
举个简单易懂的例子,假设HandlerInterceptor是你爷爷,你想拥有你爷爷的财产。要么你直接继承你爷爷(HandlerInterceptor),要么是你爸已继承你爷爷,这时你直接继承你爸就等于继承你爷爷了(HandlerInterceptorAdapter),同时还拥有了你爸的财产(如果你爸有财产)。拦截器是对所有action请求都执行,切面Aspect的粒度比拦截器HandlerInterceptor更小一些,可以指定某个方法、某个类包下的全部方法、某个注解才去执行致这段拦截功能。原创 2023-09-28 11:00:00 · 364 阅读 · 0 评论 -
下载项目路径下的文件
文件下载(比如模板下载),方法之一是先在服务器上创建一个路径,再通过代码里面写死或配置去读取这个路径的下的这个文件进行下载。这个方法的缺点就是需要提前创建好这个目录,并给文件路径给与读写权限,上线时还有可能忘记做这个操作了。今天主要是写一个把文件放在项目里面,打包后运行可直接可以下载的功能。原创 2023-09-25 14:56:52 · 184 阅读 · 0 评论 -
自定义注解(校验参数必填demo)
以上就是整个过程,最重要的是第二步,整个自定义注解的功能都是在这里面实现的。其实字段必填spring也提供了注解@NotNull,示例如下。所以自定义注解一般会写点其他什么业务逻辑的功能,有现成的肯定是直接用谁还不辞辛苦自己去写。其中异常工具类ExceptionUtil.buildException()我这里就不贴代码了,自己写一个或者替换一下。注解在开发过程中很常用,他也支持自定义注解。下面写了一个校验请求参数必填的自定义注解。原创 2023-07-01 15:52:39 · 906 阅读 · 0 评论 -
创建mongodb项目
https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/,有兴趣的可以去了解。repository接口层(这里的repository层我没有使用, 因为与下面的service层二选其一就行了。它两的区别跟 mybatis和jpa类似。首先新建一个springboot项目,新建项目略,不会的新手可以参考。刚创建好springboot项目的时候就一个启动类。接下来把各个代码贴一下。service接口层。原创 2023-06-05 10:15:27 · 253 阅读 · 0 评论 -
maven的pom文件
我们只需要引入spring-boot-start-parent后很多其他依赖就不用在引用了,因为spring-boot-start-parent这个文件中的套餐将我们需要的所有依赖都准备好了。maven会根据pom文件拉取依赖包,根据群组id先是在我们本地仓库对应的路径去找,找不到就去远程仓库下载回来本地。下面这个是安装maven后配置文件里面的,它是所有pom的父pom,所有maven项目继承该配置。我就还需要配置这些非中央仓库告诉maven除了上面的中央仓库,你还可以去我提供的这些仓库里找。原创 2023-06-08 16:00:00 · 2011 阅读 · 0 评论 -
单个用户单个接口请求次数限制
除了注解的实现方式, 也可以通过拦截器+redis缓存之类的去实现。通过注解的形式去实现,需要用到的jar是。给需要限制请求次数的接口添加自定义注解。原创 2023-05-12 00:15:00 · 500 阅读 · 1 评论 -
对已有的json重新排序
JSONObject的底层是Map结构, 默认是 HashMap,也可以改成LinkedHashMap,二者在顺序上有些差别。改成LinkedHashMap的方法是。接口做签名时,拼接明文字符串时候,大部分人约定入参需要按字母顺序进行排序,所以写了json重新排序的方法。其中心思想还是用json自带的转字符串并排序。但是如果是LinkedHashMap类型的,则上述的工具类则会失效不起作用。,最后再转回json。原创 2023-04-27 16:23:53 · 1404 阅读 · 0 评论 -
分割list集合划分批次
在某些业务中,当一个list的数据量很大时, 就可能会考虑进行拆分。比如导出数据, 每N条追加写入表格;提交数据库,每N条执行一次insert 等诸多场景。下面写了三种拆分list 的方法。原创 2023-04-26 14:39:32 · 523 阅读 · 0 评论 -
easyexcel
2.除了性别,比如再有状态0-失效,1-生效,则参照如上在写一个转换类XXXX.java就是,改最后一个convertToExcelData方法,不是字典表的自己写ifelse去返回对应的中文值也行。早就听说阿里巴巴的easyexcel导出数据,在针对大量数据方面不仅效率快,也不会出现内存溢出。它的导出就一行代码,然后就是实体字段添加注解配置就完事了。其中 userService 和 DictService,以及枚举类就不贴代码了,意义不大自己去实现一下就行。原创 2023-03-31 01:00:00 · 991 阅读 · 0 评论 -
多继承多实现
以上是抽象类和接口的多继承多实现例子,在调用的类里面注入的时候,通过注解的形式注入指定name从而决定走的是哪个一个具体的实现类。子实现通过@Component或@Service表明自己唯一的name。第2个实现类serviceB 它还调用了一个接口,这个接口也是多实现的,这个接口的两个实现类里面的业务逻辑也是打印一行日志。第1个实现类serviceA 直接处理业务逻辑(即打印一行日志,当然大家实际项目中肯不是打印一行日志这么简单)可以用来处理,不同地方调用统一的入口却走的是不一样的逻辑。原创 2023-03-09 09:41:05 · 261 阅读 · 0 评论 -
基础数据类型的比较
第一个:String 关键词的源码里面是有final修饰的, 字符串zhangsan在内存里面只有唯一一个快照,s1和s2指向的地址都是同一个,而== 比较的是内存地址,所以s1s2的内存地址值相同所以true。, 非缓存数组范围内的 不论赋值方式 一律都不相等,因为超出都是new新的对象两个新变量的内存地址值是不相等的,且缓存范围内,两边变量只要任意一个出现new关键字就都是不相等的。第二个: s3用了new关键词,用new就会新创建一个并在存在另外一个地方,所以内存地址就不相同了,指向也不一样。原创 2023-01-10 21:43:22 · 416 阅读 · 0 评论 -
java获取树行结构菜单
项目中免不了会遇到树形结构的查询,今天分享一下我写的一个查询方法。 先看数据库的数据,主要有id,parentId,name三个字段(可能还有其他本次无用的很多字段),根节点的父id设置为0实现的效果下面是业务层的实现代码,主要是递归的思想实体和返回对象创建表语句......原创 2022-07-09 18:37:37 · 869 阅读 · 0 评论 -
plus和mybatis的区别
plus和mybatis的区别:puls是增强版,在mybatis上进行了拓展,保留了mybatis的全部功能。对于业务线的开发人员来说,相比mybatis最大的优点是: 单表的增删改查以及列表分页不需要xml来写sql语句,因为plus提供了一个叫做BaseMapper的接口(在mybatis-plus-core.jar里面),内部已经提供了相当多的crud操作方法,详细如下只有当联表查询或者一些复杂......原创 2022-07-01 17:11:56 · 1961 阅读 · 0 评论 -
字符串修改前后比较不同
页面上有一个勾选列表,需要实现页面修改之后被新增、修改、删除的数据实现同步后台数据库表里。做法是先是查数据库表原有的数据的主键(逗号拼接成字符串形式)然后与页面修改之后传到后台的字符串进行比较,找出勾选的不同之处。然后把新勾选的插入数据库,勾选去的从数据库删除,仍保留勾选的对数据库字段进行更新。下面是找出新老两个字符串哪些是新增哪些是删除哪些是保留的方法package yulisao.test;import org.apache.commons.lang3.StringUtils;import原创 2022-04-06 00:08:15 · 1298 阅读 · 0 评论 -
List<Map>根据map字段排序
从一个list<map>根据指定的map字段进行排序package yulisao.test;import org.apache.commons.collections.CollectionUtils;import org.apache.commons.lang3.StringUtils;import java.util.*;/** * @author yulisao * @createDate 2022/3/20 0020 下午 11:34 */public class原创 2022-03-27 21:33:50 · 10931 阅读 · 1 评论 -
找出两个字符串重叠的部分
有个需求是对两个人的运动轨迹进行分析判断是否有过接触,运动轨迹是一个字符串或者数组。详细的需求就不透露了,但其中会涉及到求在两个字符串都出现的部分,也就是交集 。下面是实现方法package yulisao.test;import java.util.ArrayList;import java.util.List;import org.apache.commons.collections.CollectionUtils;import org.apache.commons.lang3.Strin原创 2022-03-27 20:39:26 · 1323 阅读 · 0 评论 -
Socket请求
测试时可以直接使用软件工具,比如SocketTool.exe,也方便若编程中需要Socket的请求,可以参考如下方法。 /** * socket连接 * * @param ip 目标主机地址 * @param port 目标端口 * @param req_msg 报文数据 * @param timeout 超时时间(秒) * @return */ public static String sendSocketMessage(String ip, int port,原创 2021-07-06 17:18:54 · 1183 阅读 · 0 评论 -
读取/导出带文档密码的表格
前两天做了导出excel还要求打开时输入密码,整理了一下代码,写个工具类。说明:excel表格分为2003版本文件名后缀xls和2007版本文件名后缀xlsx,版本不同读写创建文档略有不同xls加密依赖jxcell.jar,xlsx依赖的poi-ooxml.jar,且两者不能混用否则报错。xls 自带了写保护功能,但可以绕过密码以只读模式打开文档,只是不能编辑而已。本次的需求是要密码才准查看,所以改用了jxcell.jarxssfWorkbook当数据超大(1048576行,16384列)时,原创 2021-04-26 14:05:16 · 864 阅读 · 1 评论 -
认识一下内部类
内部类顾名思义就是类里面的类。为什么使用内部类,一是起到更好的封装作用,不让你知道具体实现细节。二是最主要的,java里面一个类不能同时继承多个类,内部类可以委婉的实现java多继承。内部类有四种:基本内部类静态内部类局部内部类匿名内部类先不说内部类,看我们常见的类长什么样子先public class OutClassTest{ // 类里面的方法1 public static int cal(int a, int b) { // 有static修饰才能被他人调用,方法名和类名不一样的方原创 2021-03-26 11:00:12 · 119 阅读 · 0 评论 -
object转list实体对象
接收别人返回的object类型数据 :{pageNum=1, pageSize=10, list=[{id=123, name=张三, age=12}, {id=124, name=李四, age=18},{id=125, name=王五, age=22}]}将其转成list实体,需要依赖gson-2.8.5.jar log.info("查询成功,{}", response.getBody()); Object result = response.getBody(); // 获取返回数据 Ma原创 2021-03-11 11:02:10 · 4321 阅读 · 0 评论 -
map字符串转json格式
Gson 依赖 Gson-2.7.jarpublic static void main(String[] args) { String str = "{userName=yulisao, age=18, sex=1, addr=台湾}"; Gson gson = new Gson(); Map<String, String> map = new HashMap<String, String>(); map = gson.fromJson(str, map.ge原创 2021-02-26 15:27:11 · 1478 阅读 · 1 评论 -
接口自测方法
当自己写完接口后,一般会先自测一下, 以免联调时千疮百孔,耽误进度和降低自我形象。自测接口可以自己写单元测试测试一下,也可以使用第三方工具模拟测试一下,比如postman。方案1 postman测试postman自行网上搜索下载一个就行,不需要安装解压出exe即可,放本地某个目录下然后发送快捷方式至桌面即可。打开postman如下如上椭圆圈出的params无需填写,毕竟我们一般是测post请求(因为get请求就是url后面拼接参数直接在浏览器地址栏请求即可无需多此一举了)。post请求主要填写三个地原创 2021-02-22 17:23:33 · 1026 阅读 · 0 评论 -
导出excel合并单元格
导出表格package ExcelTest;import java.io.File;/** * 导出excel工具类(支持合并单元格) * * @author yulisao * @createDate 2020年11月16日 */public class mergeCellUtil { private static final short FONT_SIZE_TITLE = 14; //标题字体大小 private static final short FONT_SIZE_原创 2020-12-02 17:42:32 · 1588 阅读 · 1 评论 -
tomcat启动报错 http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar
前不久接手了一个老古董项目, 本地启动的时候报错The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar。虽然tomcat启动成功了, 但是浏览器一访问页面就是这个错误提示,始终绕不过去。这个是因为页面用了jstl标签库,如<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>之类,但它原创 2020-11-16 16:07:32 · 2990 阅读 · 0 评论 -
xml添加节点(加签)
xml报文加签名,也就是往xml报文里面多加一个节点,实质就是追加一个参数放进进去。 除了加签的用途,也可以加其他参数。package xmlTest;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;/** * xml追加节点 * * @author yulisao * @createDate原创 2020-08-27 18:44:22 · 1787 阅读 · 0 评论 -
压缩加密文件工具类
此工具类可以压缩和解压文件,支持设置解压密码。说明:1 压缩文件时候判定被压缩文件是否存在, 不存在会报错。2 示例是压缩txt,也可以doc,pdf,xlsx等其他文件。3 压缩和解压不同文件类型可通用,但解压不同文件类型读取内容的写法略有不同。zipUtil.javapackage zipTest;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import jav原创 2020-08-26 11:22:23 · 256 阅读 · 0 评论 -
pdf工具类:添加文案水印
以前写了一个pdf添加图片水印的工具类, 现在在写一个对上传的pdf文件添加文字水印的例子。html长传代码。 bootstrap框架,样式文件和js库 自行引入。<style>.file { position: relative; display: inline-block; background: #D0EEFF; border: 1px solid #99D3F5; border-radius: 4px; padding: 4px 12px; overflow: hid原创 2020-08-12 19:13:37 · 963 阅读 · 0 评论 -
生成二维码
今天做了个推广二维码的功能,主要依赖谷歌开源的core架包实现,推广可以使用链接或者二维码(实质上二维码就是携带了链接信息而已)。二维码相比链接好处在于方便不需要记住或者去复制粘贴链接,毕竟扫码已经很普遍了。不好的地方有些扫码软件不给你自动跳转仅展示扫码出来的结果(比如微信扫码不是所有链接都跳,可能是微信的风控/白名单导致不跳)推广链接比如: http:// www.yulisao.com/down.html?id=12345678 输入到浏览器就可以下载, 链接后面的参数如果比较重要的话最好做下加密。原创 2020-07-07 09:38:26 · 446 阅读 · 0 评论 -
解析xml文件- java
本次解析xml示例目的是拼接完整的文件路径。testxml.xml文件内容如下<?xml version="1.0" encoding="UTF-8" standalone="yes"?><root> <FileInfoList> <FileInfo> <FileRootPath>/home/root/yulisao/</FileRootPath> <FileNameList>原创 2020-05-12 18:36:45 · 175 阅读 · 0 评论 -
润乾报表文件修改
润乾报表是一个专业的报表软件工具,安装后需要授权文件才能正常使用软件哟。报表文件的后缀是.rap,工作上有几个报表文件修改修改,记录一下修改的过程。安装好润乾软件后, 第一次使用会要求选择授权文件。1.文件 - > 打开 - > 选择本地的报表文件2.本次我要修改的内容是复杂sql,在sql 的where后增加了条件, 比如 原始是 where name = ‘yulisao’...原创 2020-04-10 20:09:14 · 1147 阅读 · 0 评论 -
jar包反编译形成pom工程
这周接了一个需要吧把jar还原代码新建pom项目的工作,一百多个jar还是挺累的,鼠标用的都不灵敏了。当然这只是量的问题,下面记录一下具体的操作方法。1 反编译jar得到源码1.1 使用jd-gui工具,这个不需要安装,下载之后压缩包里面有exe应用程序。打开jd-gui.exe,先设置一下反编译后不需要有注释。点击help -> preferences, 不要勾选write origi...原创 2020-04-07 21:37:20 · 8106 阅读 · 0 评论 -
压缩多个文件
多个文件名称用字符串数组存储传入。String [] fileNames = {"aa.txt","bb.txt","cc.txt"}; 压缩处理方法 /** * 压缩文件 * * @param sourceFilePath 资源主路径 * @param outFileName 输出文件名称 * @param allFileNames 文件名称 * @ret...原创 2019-05-13 10:56:53 · 444 阅读 · 0 评论 -
读取Excel
package com.jerry;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;impor...原创 2019-05-16 14:38:00 · 81 阅读 · 0 评论 -
java查数据导出txt或csv或excel
导出的工具类代码如下,CSV依赖一个包 commons-csv-1.4.jarpackage common.utils.csv;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.List;im...原创 2019-05-11 11:51:41 · 1425 阅读 · 0 评论 -
SVN合并代码(分支合并到主干上)
开发人员做功能时,有时需要拉分支出来单独做,昨晚之后还需合并到主干上。下面介绍一下如何合并代码。工具/原料SVN、eclipse/myeclipse工具步骤1:打开myeclipse,找到要合并的项目文件,右击文件,选择team->合并,如图:步骤2:选择合并类型, 不勾选最下面的那个选项。 点击下一步步骤3:选择要合并的资源,也就是分支路径。然后点击下一步步骤4:...原创 2019-04-18 15:19:47 · 1134 阅读 · 0 评论