Java 中如何生成 UUID
java.util.UUID 类基础用法
Java 从 1.5 版本起提供了内置的 java.util.UUID 类,无需额外依赖。UUID.randomUUID() 方法生成 UUID v4(随机),是最常用的方法。UUID 类还提供了解析、比较和格式化 UUID 的方法。UUID 对象是不可变的(immutable),是线程安全的,可以在并发环境中安全使用。
import java.util.UUID;
public class UUIDExample {
public static void main(String[] args) {
// 生成 UUID v4
UUID uuid = UUID.randomUUID();
System.out.println(uuid); // 标准格式
System.out.println(uuid.toString()); // 同上
System.out.println(uuid.toString().toUpperCase()); // 大写
System.out.println(uuid.toString().replace("-", "")); // 无连字符
// 获取 UUID 字段
System.out.println(uuid.version()); // 4
System.out.println(uuid.variant()); // 2 (IETF)
System.out.println(uuid.getMostSignificantBits());
System.out.println(uuid.getLeastSignificantBits());
// 解析 UUID 字符串
UUID parsed = UUID.fromString("550e8400-e29b-41d4-a716-446655440000");
System.out.println(parsed.version()); // 4
// 从字节数组创建
byte[] bytes = new byte[16]; // 需要填充
UUID fromBytes = new UUID(
java.nio.ByteBuffer.wrap(bytes, 0, 8).getLong(),
java.nio.ByteBuffer.wrap(bytes, 8, 8).getLong()
);
}
}
在 Spring Boot 中使用 UUID 主键
// Spring Boot + JPA 实体示例
import jakarta.persistence.*;
import java.util.UUID;
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(columnDefinition = "uuid", updatable = false)
private UUID id;
// 或者手动指定生成方式
@Id
@Column(nullable = false, updatable = false)
private UUID id = UUID.randomUUID();
private String customerName;
private double amount;
// 使用 @GenericGenerator (Hibernate)
// @GeneratedValue(generator = "uuid2")
// @GenericGenerator(name = "uuid2", strategy = "uuid2")
// private String id;
}
UUID 作为 REST API 路径参数
// Spring MVC Controller 示例
import org.springframework.web.bind.annotation.*;
import java.util.UUID;
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public ResponseEntity getUser(@PathVariable UUID id) {
// Spring 自动将路径参数字符串转换为 UUID 对象
// 如果格式不合法,自动返回 400 Bad Request
return userService.findById(id)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
@PostMapping
public ResponseEntity createUser(@RequestBody CreateUserRequest request) {
UUID newId = UUID.randomUUID();
User user = userService.create(newId, request);
URI location = URI.create("/api/users/" + newId);
return ResponseEntity.created(location).body(user);
}
}
UUID 的字符串验证
import java.util.UUID;
import java.util.regex.Pattern;
public class UUIDValidator {
private static final Pattern UUID_PATTERN = Pattern.compile(
"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-7][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
);
// 方法1:使用正则表达式(严格格式检查)
public static boolean isValidUUID(String str) {
return str != null && UUID_PATTERN.matcher(str).matches();
}
// 方法2:使用 UUID.fromString(会接受一些非标准格式)
public static boolean isValidUUIDLoose(String str) {
try {
UUID.fromString(str);
return true;
} catch (IllegalArgumentException e) {
return false;
}
}
}
批量生成 UUID 的高效方式
import java.util.UUID;
import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class BatchUUIDGenerator {
// 生成指定数量的 UUID 列表
public static List generate(int count) {
return IntStream.range(0, count)
.mapToObj(i -> UUID.randomUUID().toString())
.collect(Collectors.toList());
}
// 生成无连字符格式
public static List generateCompact(int count) {
return IntStream.range(0, count)
.mapToObj(i -> UUID.randomUUID().toString().replace("-", ""))
.collect(Collectors.toList());
}
public static void main(String[] args) {
List uuids = generate(1000);
System.out.println("Generated: " + uuids.size() + " UUIDs");
System.out.println("First: " + uuids.get(0));
}
}
UUID 在 Kotlin 中的使用
// Kotlin 示例(使用 Java UUID 类)
import java.util.UUID
// 基本用法
val id: UUID = UUID.randomUUID()
val idStr: String = id.toString()
// 扩展函数让代码更简洁
fun String.toUUID(): UUID = UUID.fromString(this)
fun String.toUUIDOrNull(): UUID? = try { UUID.fromString(this) } catch (e: IllegalArgumentException) { null }
// 使用
val uuid = "550e8400-e29b-41d4-a716-446655440000".toUUID()
val maybeUuid = "invalid".toUUIDOrNull() // null
// data class 中使用
data class Product(
val id: UUID = UUID.randomUUID(),
val name: String,
val price: Double
)
立即免费使用相关工具
免费使用 →