别人那没有的工具类

检查一个对象中的参数值是否为空
public class ValidUtils {

    public static <T> JSONObject inspect(T t, String requireParams) {
        JSONObject jsonResult = new JSONObject();
        jsonResult.put("code", CommonResultEnum.CHECK_VALID.code());
        String jsonString = JSONObject.toJSONString(t);
        JSONObject jsonObject = JSONObject.parseObject(jsonString);
        String[] params = requireParams.split(",");
        for (String param : params) {
            if (jsonObject.getString(param) == null || jsonObject.getString(param).isEmpty()) {
                jsonResult.put("code", CommonResultEnum.CHECK_VALID_ERROR.code());
                jsonResult.put("msg", String.format(CommonResultEnum.CHECK_VALID_ERROR.message(), param));
                break;
            }
        }
        return jsonResult;
    }
}

测试:

    @Test
    public void testValidUtils() {
        User user = new User();
        user.setUsername("张思睿");
        user.setPassword("123456");
        //user.setAge(23);
        JSONObject jsonResult = ValidUtils.inspect(user, "username,password,age");
        System.out.println(jsonResult.get("code") + ": " + jsonResult.get("msg"));

    }

打印:

20201: age参数为空

Bean以及集合之间浅拷贝
public class ConverterUtils {

    public static <V, C> C convert(V v, Class<C> beanClass) {
        if (ObjectUtils.isEmpty(v)) {
            return null;
        } else {
            C instance = null;
            try {
                instance = beanClass.newInstance();
                BeanUtils.copyProperties(v, instance);
            } catch (Exception var4) {
                var4.printStackTrace();
            }

            return instance;
        }
    }

    public static <V, C> List<C> convertList(List<V> vList, Class<C> beanClass) {
        List<C> cList = new ArrayList();
        if (CollectionUtils.isEmpty(vList)) {
            return cList;
        } else {
            vList.stream().forEach((v) -> {
                cList.add(convert(v, beanClass));
            });
            return cList;
        }
    }
}

测试convert方法:

	@Test
    public void testConverterByConverterUtils() {
        User user = User.builder()
                .username("张思睿").password("123456")
                .age(25).gender("男").hobby("女")
                .build();
        Persion persion = ConverterUtils.convert(user, Persion.class);
        System.out.println(persion);
    }

打印:

Persion(username=张思睿, age=25, gender=, hobby=)

测试convertList方法:

private static List<User> users = new ArrayList<>();

    static {
        User user = User.builder()
                .username("张兔").password("123456")
                .age(25).gender("女").hobby("男")
                .build();
        User user2 = User.builder()
                .username("张思睿").password("123456")
                .age(25).gender("男").hobby("女")
                .build();
        users.add(user);
        users.add(user2);
    }

    /**
     * 测试 converterList方法
     * 具体实现 {@link ConverterUtils}
     */
    @Test
    public void testConverterListByConverterUtils() {
        List<Persion> persions = ConverterUtils.convertList(users, Persion.class);
        persions.stream().forEach((persion) -> {
            System.out.println(persion);
        });
    }

打印:

Persion(username=张兔, age=25, gender=, hobby=)
Persion(username=张思睿, age=25, gender=, hobby=)
List集合根据单/多属性条件去重
public class UniqueUtils {

    public static <T> List<T> distinctByKeys(List<T> t, String... fields) {
        Stream<T> tStream = t.stream().filter(new Predicate<T>() {
            Map<Object, Boolean> seen = new ConcurrentHashMap<>(10);

            @Override
            public boolean test(T t) {
                boolean flag = false;
                try {
                    for (String field : fields) {
                        Field declaredField = t.getClass().getDeclaredField(field);
                        declaredField.setAccessible(true);
                        flag = seen.putIfAbsent(declaredField.get(t), Boolean.TRUE) == null;
                    }
                } catch (NoSuchFieldException | IllegalAccessException e) {
                    e.printStackTrace();
                }
                return flag;
            }
        });
        return tStream.collect(Collectors.toList());
    }
}

测试根据单个属性去重:

public class UniqueUtilsTest {

    private static List<Persion> list = new ArrayList<>();

    static {
        list.add(new Persion("张思睿", 23));
        list.add(new Persion("里斯", 24));
        list.add(new Persion("王武", 25));
        list.add(new Persion("张思睿", 26));
    }

    /**
     * 测试根据一个属性去重
     */
    @Test
    public void distinctByKeyTest() {
        UniqueUtils.distinctByKeys(list, "username").forEach(
                l -> System.out.println(l.getUsername() + "," + l.getAge()));
    }
}

打印结果:

张思睿,23
里斯,24
王武,25

测试根据多个属性去重

public class UniqueUtilsTest {

    private static List<Persion> list2 = new ArrayList<>();

    static {
        list2.add(new Persion("张思睿", 23));
        list2.add(new Persion("里斯", 24));
        list2.add(new Persion("王武", 25));
        list2.add(new Persion("张思睿", 26));
    }
    /**
     * 测试根据多个属性去重
     */
    @Test
    public void distinctByKeysTest() {
        UniqueUtils.distinctByKeys(list2, "username","age").forEach(
                l -> System.out.println(l.getUsername() + "," + l.getAge()));
    }
}

测试结果:

张思睿,23
里斯,24
王武,25
张思睿,26

注意集合中的对象属性值;在distinctByKeys()方法中传入了两个属性,当这两个属性的值都一样的时候才会去重;

持续更新中。。。。

具体代码地址:https://github.com/haoxiaoyong1014/common-utils
备用地址
欢迎star!

### 配置 JumpServer 使用网易邮箱实现邮件告警 #### 设置网易邮箱 SMTP 服务 为了使 JumpServer 能够通过网易邮箱发送告警邮件,需先在网易邮箱中启用 POP3、IMAP 和 SMTP 功能,并获取相应的授权码[^1]。 #### 修改 JumpServer 的站点 URL 确保已将 JumpServer 当前站点的 URL 更新为服务器的实际 IP 地址或域名。这一步骤对于新用户的密码重置链接至关重要,因为默认情况下该链接会指向 localhost,从而无法正常工作[^2]。 #### 编辑配置文件 编辑 `/etc/jumpserver/config.yml` 文件中的 `EMAIL_*` 参数来指定网易邮箱的服务详情: ```yaml EMAIL_HOST: smtp.163.com EMAIL_PORT: 25 EMAIL_HOST_USER: your_email@163.com EMAIL_HOST_PASSWORD: 'your_authorization_code' EMAIL_USE_SSL: False EMAIL_USE_TLS: True DEFAULT_FROM_EMAIL: your_email@163.com ``` 其中: - `EMAIL_HOST`: 网易邮箱 SMTP 服务器地址; - `EMAIL_PORT`: 默认端口为 25 或者如果使用 SSL/TLS 加密则可能是其他端口号; - `EMAIL_HOST_USER`: 完整的网易邮箱账号名; - `EMAIL_HOST_PASSWORD`: 上述提到的授权码而非登录密码; - `EMAIL_USE_SSL`, `EMAIL_USE_TLS`: 根据实际情况选择是否开启加密连接; - `DEFAULT_FROM_EMAIL`: 发件人的显示名称可以自定义设置。 完成上述更改之后保存并重启 JumpServer 服务以应用新的配置。 #### 创建邮件告警模板 进入 JumpServer Web 控制台,在 "管理" -> "报警媒介类型" 下点击“创建媒体类型”。按照提示输入必要的信息字段 `{ALERT.SENDTO}`, `{ALERT.SUBJECT}` 及 `{ALERT.MESSAGE}` 来构建个性化的通知消息格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值