J Micro Common
通用工具模块,提供 JSON 处理、日期格式化、表单校验规则生成、基础校验注解以及常用工具类,支持 Java 与 Kotlin 项目。
目录
引入依赖
<dependency>
<groupId>com.jiangtj.micro</groupId>
<artifactId>micro-common</artifactId>
</dependency>
建议配合
micro-dependenciesBOM 使用,省略版本号(见根 README)。
功能概览
- JSON 工具:
JsonUtils统一的JsonMapper封装、扩展函数toJson/fromJson。 - 日期格式化:常用
DateTimeFormatter常量(DATE_TIME、RFC3339等)。 - 表单规则生成:
FormRuleGenerator根据jakarta.validation注解生成 async-validator 规则。 - JSON Schema 生成:
JsonSchemaGenerator根据数据类生成 JSON Schema(draft 2020-12)。 - 校验注解:
@MobilePhone、@MinLength、@MaxLength。 - 异常基类:
MicroException、MicroHttpException、MicroProblemDetailException。 - 常用工具类:
FileNameUtils、UUIDUtils、RandomStringUtils、PhoneNumberUtils、MapUtils。
使用示例
JSON 处理
val payload = mapOf("name" to "micro")
val json = JsonUtils.toJson(payload)
val back = JsonUtils.fromJson(json, Map::class.java)
val json2 = payload.toJson()
val back2: Map<String, String> = json2.fromJson()
如果需要替换默认的 JsonMapper(应用启动时由 JMicroCommonAutoConfiguration 初始化):
val mapper = JsonMapper.builder().build()
JsonUtils.init(mapper)
日期格式化
val now = LocalDateTime.now()
val text = now.format(DATE_TIME)
val rfc3339 = now.atOffset(ZoneOffset.UTC).format(RFC3339)
表单规则生成
FormRuleGenerator 会读取 jakarta.validation 及 micro-common 自定义注解,生成前端表单校验规则。
@Data
class Example {
@NotBlank
private String name;
@Min(18)
private int age;
@MobilePhone
private String phone;
}
Map<String, List<FormRule>> rules = FormRuleGenerator.generate(Example.class);
String json = JsonUtils.toJson(rules);
Kotlin 也可以直接使用泛型版本:
val rules = FormRuleGenerator.generate<Example>()
如果需要自定义规则处理器:
FormRuleGenerator.addHandler(CustomHandler())
JSON Schema 生成
JsonSchemaGenerator 会根据字段类型、Jackson 注解与 jakarta.validation 注解,把数据类转换为 JSON Schema(draft 2020-12):
data class BookForm(
@field:NotBlank @field:Size(max = 128) val title: String,
@field:Size(max = 32) val isbn: String? = null,
@field:NotNull @field:DecimalMin("0") val price: BigDecimal,
)
val schema = JsonSchemaGenerator.generate<BookForm>()
val json = JsonUtils.toJson(schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "BookForm",
"type": "object",
"properties": {
"title": {"type": "string", "minLength": 1, "maxLength": 128},
"isbn": {"type": "string", "maxLength": 32},
"price": {"type": "number", "minimum": 0}
},
"required": ["title", "price"]
}
Java 中可直接传入 Class:
JsonSchema schema = JsonSchemaGenerator.generate(BookForm.class);
说明:
- Kotlin 非空属性以及
@NotNull/@NotBlank/@NotEmpty会进入required。 - 支持嵌套对象、集合/数组(
items)、Map(additionalProperties)、枚举(enum)。 - 日期时间类型会映射为
format:date、time、date-time;UUID、URI也会带上format。 - 结果按类缓存,重复调用不会重复解析;存在循环引用时会截断为
{"type": "object"}。
校验注解
@MobilePhone:支持String与Long类型的手机号校验。@MinLength/@MaxLength:补充字符串长度校验(可配置是否trim)。
常用工具类
val filename = FileNameUtils.getRandomFileNameWithSuffix("png")
val ext = FileNameUtils.getFileExtension("avatar.png")
val shortUuid = UUIDUtils.generateBase64Compressed()
val code = RandomStringUtils.get(6)
val e164 = PhoneNumberUtils.toE164("13800000000")
val map = dto.toMap()
异常基类
MicroException:通用运行时异常基类。MicroHttpException:携带 HTTP 状态码的异常。MicroProblemDetailException:携带title/detail的问题详情异常(可用于转换为 RFC 9457 响应)。