神奇海螺
实际项目开发中出现或忽略的问题
一壶浊酒伴余生
缓慢而坚定地做自己力所能及的事情。
展开
-
Java8 时间字符串校验是否为对应的日期格式
这是因为在 Java 8 的新日期 API 下,yyyy 表示公元纪年(year-era),这种格式在解析日期时会检查公元位(G),不存在时会报错;上面例子中使用 parseDefaulting(ChronoField.ERA, 1) 设置一个默认的公元纪年位,表示公元后,就和我们正常的日期保持一致。如果使用非严格模式的 DateTimeFormatter 可能并不会真正的检查出日期字符串的错误,比如 20230230,转日期类型并不会报错,会自动转成一个正确的日期 20230228;原创 2023-11-06 22:44:12 · 819 阅读 · 0 评论 -
请求第三方接口通用逻辑
/** * post 请求第三方接口 * * @param url 请求地址 * @param dto 请求参数 * @param apiDesc 接口描述 */private void postThird(String url, Object dto, String apiDesc) { try { log.info("【请求第三方】{},请求url: {}, 请求参数: {}", apiDesc, url, JSON.toJSONString(dto原创 2022-04-13 17:45:36 · 674 阅读 · 0 评论 -
Java实体类转URL参数
在请求某些第三方接口的时候,遇到了 POST 请求传参方式为拼接 URL 参数的形式,所以整了个实体类转 URL 参数的方法处理。代码实现只转换当前类属性/** * 通过实体类获取 URL Params * * @param clazz 实体类 * @return URL Params */public static String parseUrlParams(Object clazz) { // 遍历属性类、属性值 Field[] fields = clazz.getCl原创 2022-04-13 16:59:21 · 2319 阅读 · 0 评论 -
使用Redis进行接口限流
流程图代码实现/** * 是否限制接口请求 * * @param request 请求体 * @return true-禁止请求 false-允许请求 */private boolean limitApi(HttpServletRequest request) { String uri = request.getRequestURI(); String ip = request.getRemoteAddr(); String key = "limit:" + uri原创 2022-04-13 16:48:49 · 795 阅读 · 0 评论 -
文件上传接口Feign远程调用报错:MultipartException: Current request is not a multipart request
问题复现服务A 文件上传接口:@PostMapping("/upload")public R upload( @RequestParam("file") MultipartFile file, @RequestParam("otherparam") String otherParam) { //..... return R.success();}服务B使用Feign远程调用服务A的上传接口:@PostMapping("/service_a/up原创 2022-01-18 16:34:12 · 1437 阅读 · 1 评论 -
zip文件加密、解密解压实操,附带文件上传安全检查
Zip4J 使用今天接触到一个要解压上传的加密zip的需求,这里使用 zip4j 来实现加密解密。依赖<dependency> <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j</artifactId> <version>2.9.0</version></dependency>加密/** * 添加普通文件为zip文原创 2022-01-05 20:48:41 · 4123 阅读 · 0 评论 -
IDEA远程debug调试JavaWeb项目
配置服务器上 web 项目所在 tomcat 文件:calalina.sh在文件开头增加CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6666"这里 address=6666 端口要跟下面 IDEA 中配置相同。配置 IDEA :Edit Configurations -> 点击 + 选择 Remote(新版可能是 Remote JVM Debug) -> 配置服..原创 2021-11-24 09:42:26 · 548 阅读 · 0 评论 -
Mybatis 读取时间类型数据时间值读出值00:00:00问题解决
MySQL 中的时间类型有 Date、DateTime、Timestamp等,对应 Java 类型的 Date 或 Java 1.8 后的 LocalDate/LocalDateTime。而在写 SQL 进行字段关系映射时,需要指定对应的 jdbcType,当指定的类型不正确时,可能导致数据的不一致性。<resultMap id="BaseResultMap" type="io.zsy.model.EquityTransactionInfo"> <id column="demo原创 2021-09-08 14:26:35 · 1755 阅读 · 0 评论 -
ClassCastException: LinkedHashMap cannot be cast to Xxx
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to Xxx在项目中使用 RestTemplate 发生 HTTP 调用后接受响应对象时,返回的结果是 LinkedHashMap 类型, 如果直接用响应对象接收并使用时,就会抛出如题异常。解决方法:使用 FastJson 转成 jsonString 后再转为响应对象。BaseResponse<User> response = JSONObject..原创 2021-08-09 13:53:14 · 389 阅读 · 0 评论 -
根据RequestContextHolder获取request、response和headers
分析原理参考:https://www.cnblogs.com/shuilangyizu/p/8621669.htmlRequestContextHolder 的使用RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();// 获取请求体 requestHttpServletRequest request = ((ServletRequestAttributes) requestA.原创 2021-08-06 15:16:12 · 5929 阅读 · 3 评论 -
@RequestHeader 请求头参数为空异常处理
@RequestHeader 请求头参数为空ServletRequestBindingException异常处理获取请求头方式使用注解 @RequestHeader@PostMapping(value = "/test/header")public void post(@RequestHeader(value="sign") String sign) { // ...}从 HTTPServletRequest 中获取@PostMapping(value = "/test/he原创 2021-07-29 14:42:24 · 14162 阅读 · 6 评论 -
修改表结构要对应修改Java实体和mapper映射文件
修改表结构要对应修改Java实体和mapper映射文件如题增加表字段要对应增加Java实体属性和mapper映射文件字段删除表字段要对应删除Java实体属性和mapper映射文件字段修改表字段要对应修改Java实体属性和mapper映射文件字段...原创 2021-06-01 10:30:20 · 344 阅读 · 0 评论 -
Mysql 根据月份分组并返回分组中的所有数据
现有数据如下:交易描述 金额 时间交易A 1000 2021-01-28交易B 2000 2021-01-30交易C 3000 2021-02-03交易D 4000 2021-02-04交易E 5000 2021-02-04交易F 6000 2021-03-05要求:查出交易流水信息,按时间分类倒序展示,例如:2021年3月交易F 2021-03-05 60002021年2月交易C 202原创 2021-05-13 13:58:14 · 1817 阅读 · 0 评论