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
}
}