hibernate-validator校验对象属性为List
君子拙于不知己而信于知己也——司马迁 文档: https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#_with_list 我们这里首先引入starter 1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId></dependency> 然后我们带两个Entity以及一个Controller 123456789101112131415161718package com.ruben.simplestreamquery.pojo;import lombok.Data;import javax.validation.constraints.NotEmpty;import javax.validation.constrain...
css attr
过于大方的施舍会导致盗窃——西塞罗 分享一个css函数attr MDN:https://developer.mozilla.org/zh-CN/docs/Web/CSS/attr attr可以获取我们标签内的属性作为值 例如: 1<p data-foo="hello">world</p> css: 123[data-foo]::before { content: attr(data-foo) " ";} 效果: [data-foo]::before { content: attr(data-foo) " "; } world 除了data-*的自定义属性,也可以获取其他的,例如custom-prefix 123456<style>[custom-prefix]::before { content: attr(custom-prefix);}</style><p custom-prefix="hello"&g...
获取lambda
处世让一步为高,退步即进步的张本;待人宽一分是福利人利己的根基。——洪自诚 昨天说了获取lambda代理 今天获取实际lambda对象 重要的是这个函数java.lang.invoke.LambdaMetafactory#metafactory以及altMetafactory 我们在昨天的基础上,进行获取 1234567891011121314151617181920212223@Test@SneakyThrowsvoid testVirtual() { final MethodHandle virtual = MethodHandles.lookup().findVirtual(LambdaExecutable.class, "getName", MethodType.methodType(String.class)); final SerFunc<LambdaExecutable, String> proxy = MethodHandleProxies.asInterfaceInstance(SerFunc.class...
获取lambda代理
伯乐不可欺以马,君子不可欺以人——荀子 代码如下: 123MethodHandles.Lookup lookup = MethodHandles.lookup(); MethodHandle getR = lookup.findVirtual(B.class, "getR", MethodType.methodType(Object.class)); SerFunc<Object, B> lambda = MethodHandleProxies.asInterfaceInstance(SerFunc.class, getR); 此处的lambda代理对象同样可以执行lambda对应的方法
获取泛型map工具类
一个人如果抛弃他忠实的朋友,就等于抛弃他最珍贵的声明。——索福克勒斯 代码如下: 1234567891011121314151617181920212223242526public static Map<String, Type> getGenericMap(Type paramType) { Type type = resolveType(paramType); if (type instanceof ParameterizedTypeImpl) { ParameterizedTypeImpl ty = (ParameterizedTypeImpl) type; final Class<?> rawType = ty.getRawType(); return Steam.of(rawType.getTypeParameters()).map(Type::getTypeName) .zip(Steam.of(ty.getActualTypeArgum...
低仿lusaxweb鼠标
幸福的婚姻生活,往往会被卑鄙的勾当、阴险的猜忌所破坏。——莎士比亚 这是 http://lusaxweb.net/ 它的鼠标很有意思,是一个圈,能够反色,我们低仿一个 代码如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263<!DOCTYPE html><html><head> <style> * { margin: 0; padding: 0; cursor: none; } .img { height: 80vh; width: 80vw; overflow: hidden; } .img:ho...
promise转await时小技巧
正如自然忌讳真空一样,人类是讨厌平等的。——《我是猫》 又是一个从技术推文找到的小技巧 此处将Promise函数传入,通过解构,获取到响应成功结果以及错误结果两个变量,语法简洁且便利
如何关掉Parsed mapper file日志打印
时间一直走,没有尽头,只有路口。——《摆渡人》 先说结论: 将yml配置里的mybatis-plus配置 1log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 改为 1log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl 在yml配置里新增一条 1234logging: level: root: DEBUG com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean: INFO 完整配置放在最后结尾处 为什么这样配?你是如何找到的? 首先我们搜索Parsed mapper file(因为这个日志大概率是硬编码存在于源码之中的,除非是做了日志本地化,会在配置文件里) 这里排除掉一个纯依赖模块,一个注解模块,挨个到com包搜索,在最后一个extension模块搜到了 那我们将这个类的日志级别设为INFO应该就搞定了,但是没有生效 我们打个断点,看看什么情况,等断点停到...
开源ocr库tesseract
强者容易坚强,正如弱者容易软弱。——爱默生 分享一个开源的OCR库 文档链接:https://tesseract-ocr.github.io/ 源码地址:https://github.com/tesseract-ocr/tesseract 其包含了多种编程语言
order by field
勿以己才而笑不才——房玄龄 分享一个函数field 首先在mysql内置函数的文档地址能找到这个函数: https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html 这里告诉我们,这个函数可以这么用,寻找第一个参数所在的下标位置,找不到为0: 1234mysql> SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff'); -> 2mysql> SELECT FIELD('Gg', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff'); -> 0 因为此处支持传入表字段 然后我们可以在查询时使用ORDER BY FIELD(字段,已存在的排好序的字段值)
