SpringBoot开发中常见工具类
图
基于SpringBoot进行开发能较少更多必要的工作量,例如各种配置,配置过就明白其实算是一个重复性工作,而SpringBoot将这部分工作解放了,同时其还有很多便捷化的地方,为Java项目开发提供了便捷

MD5工具


/**
 * MD5加密工具类
 *
 */
public class MyMD5Util {

    //盐,用于混交md5
    private static final String slat = "this is my salt";

    /**
     * 1.java原生用法
     *
     * @param dataStr
     * @return
     */
    public static String encrypt(String dataStr) {
        try {
            dataStr = dataStr + slat;
            MessageDigest m = MessageDigest.getInstance("MD5");
            m.update(dataStr.getBytes(StandardCharsets.UTF_8));
            byte[] s = m.digest();
            StringBuilder result = new StringBuilder();
            for (byte b : s) {
                result.append(Integer.toHexString((0x000000FF & b) | 0xFFFFFF00).substring(6));
            }
            return result.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 2.spring提供的工具类用法
     * 生成md5
     *
     * @return
     */
    public static String getMD5(String str) {
        String base = str + slat;
        String md5 = DigestUtils.md5DigestAsHex(base.getBytes());
        return md5;
    }
}

Controller层进行事务控制

一般事务都在service层进行处理,但是在特殊情况下遇到了在Controller层需要事务控制

/**
 * 测试
 */
@RestController
@RequestMapping("/test")
public class TestController {

    @Resource
    private PlatformTransactionManager transactionManager;

    @GetMapping("/transaction")
    public String transaction() {
        DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition();
        defaultTransactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        TransactionStatus transactionStatus = transactionManager.getTransaction(defaultTransactionDefinition);
        try {
            // TODO
            // 提交事务
            transactionManager.commit(transactionStatus);
            return "成功";
        } catch (Exception e) {
            // 回滚事务
            transactionManager.rollback(transactionStatus);
            return e.getMessage();
        }
    }

}

统一响应对象

正确的泛型才能在文档中显示

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 统一响应对象
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {

    /**
     * 状态码:200-请求成功、400-请求失败、401-未授权、500-服务异常
     */
    private Integer code;

    /**
     * 响应消息
     */
    private String msg;

    /**
     * 响应数据
     */
    private T data;

    /**
     * 状态码:请求成功
     */
    public static final int CODE_SUCCESS = 200;

    /**
     * 状态码:请求失败
     */
    public static final int CODE_FAIL = 400;

    /**
     * 状态码:未授权
     */
    public static final int CODE_UNAUTHORIZED = 401;

    /**
     * 状态码:服务异常
     */
    public static final int CODE_ERROR = 500;

    /**
     * 响应成功消息
     */
    public static <T> Result<T> successMsg(String msg) {
        return new Result<>(Result.CODE_SUCCESS, msg, null);
    }

    /**
     * 响应失败消息
     */
    public static <T> Result<T> failMsg(String msg) {
        return new Result<>(Result.CODE_FAIL, msg, null);
    }

    /**
     * 响应成功数据
     */
    public static <T> Result<T> data(T data) {
        return new Result<>(Result.CODE_SUCCESS, "成功", data);
    }

    /**
     * 响应成功消息和数据
     */
    public static <T> Result<T> data(String msg, T data) {
        return new Result<>(Result.CODE_SUCCESS, msg, data);
    }

    /**
     * 服务异常
     */
    public static <T> Result<T> error(String msg) {
        return new Result<>(Result.CODE_ERROR, msg, null);
    }

}

项目启动初始化数据

有时项目启动时会做一些初始化,可以使用该方式完成

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

/**
 * 初始化
 */
@Component
@Order(2) // 指定同一个项目中多个ApplicationRunner的执行顺序,越小越优先
public class InitUserAndRole implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) {
        // TODO
    }

}