AbstractLogSave.saveLog(LogSave, Api, ApiOperation, String, String, Long, long) 方法只有在标注了
@EnableLogSave 注解和在对应的方法上标注
@LogSave 注解才会生效BaseControllerAdvice
验证工具类: ValidateUtils
hc-base 核心的配置文件类
Example:
# ========================= Haichuang Setting =========================
haichuang:
// 是否启用配置
enable: true
// 项目代号
projectCode:
// 请求超时时间, 可自定义时间单位, 默认时间单位为 [秒], 默认值为 [3s]
requestTimeoutTime: 3s
@EnableControllerAdvice 注解EnumConverterFactory
FastJson枚举序列化: FastJsonConfig
自定义异常封装: ApplicationException
全局统一响应: ResultVO
ResultVO 中相关方法进行返回ThreadLocal 底层使用的内部类 ThreadLocalMap 实现的, 生命周期为当前线程,
所以不执行此方法当线程终止后 ThreadLocalMap 中的值会被JVM垃圾回收,
但推荐在不需要使用的时候显性的执行此方法, 便于理解@ApiOperation 注解的的方法相关请求响应数据记录在日志中,
从而更好去根据日志排查请求记录
具体实现请参阅 LogAspectGlobalCorsConfig@LogSave 注解的方法相关请求与响应进行持久化记录
注意: 需要自定义类继承 AbstractLogSave 抽象类, 在自定义类中实现响应持久化逻辑@ApiOperation 注解的的方法开启请求超时切面监听,
超时则会抛出请求超时异常, 开发人员需要及时解决请求超时问题
具体实现请参阅 RequestTimeoutAspect@EnumConvertValue 注解的静态方法或者类实现了 BaseEnum 的枚举
(两者同时存在时标注了 @EnumConvertValue 注解的静态方法优先级为最高), 可以自动将该对象属性名称与请求参数进行匹配,
Warning: 底层通过 ConverterFactory 进行实现时必须指定请求参数数据类型与转换的数据类型,
因此当请求参数为枚举时, 请求参数的类型必须为 String,
转换的枚举必须在方法上标注 @EnumConvertValue 注解或者实现 BaseEnum 接口
@EnumConvertValue 注解使用方法请参见该注解类文档
推荐自定义枚举类实现 BaseEnum 接口而不是使用 @EnumConvertValue 注解
当请求参数为请求体时需要在枚举类中加上下列代码实现, 代码示例:
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
public static [枚举类] resolve(String value) {
return BaseEnum.resolve(value, [枚举类].class);
}
EnumConverterFactory 进行 Convert 转换, 主要用于请求参数反序列化等场景
注意: 此注解必须在枚举类方法中标注, 标注的方法必须为静态方法, 形参限制为一个 String 类型, 返回值为当前枚举对象
静态方法代码示例(方法名可自定义):
@EnumConvertValue
public static [枚举类] convertValue() {
return [枚举值];
}
FastJson 的常用功能, 如需自定义配置需要手动注入 FastJsonConfig
已默认配置的如下:
BigInteger 自动序列化为 String 字符串
Long 自动序列化为 String 字符串
Data 自动序列化为 yyyy-MM-dd HH:mm:ss 字符串
LocalDateTime 自动序列化为 yyyy-MM-dd HH:mm:ss 字符串
LocalDate 自动序列化为 yyyy-MM-dd 字符串
LocalTime 自动序列化为 HH:mm:ss 字符串
BaseEnum 下枚举 自动序列化为 BaseEnum.value() 字符串
Enum 自动序列化为 String 字符串
List 为空时自动序列化为 [] 空集合
MatchingStrategies.STANDARDServletRequest.getRemoteAddr() 获取IP地址,
否则拿到的是Nginx等反向代理软件所在的IP地址, 并非真实的客户端IP
当设置了 X-Forwarded-For 时, 如果使用了多级反向代理, X-Forwarded-For 的值并不止一个(),
而是一串IP地址(逗号分割), X-Forwarded-For 中第一个非 unknown 的有效IP字符串, 则为真实IP地址
(客户端可以伪造 X-Forwarded-For 请求头, 需要验证IP正确性)
X-Forwarded-For: 该字段为行业统一请求头, 并非标准请求头, 用于Nginx等反向代理软件转发请求来源的IP地址
FilterRegistrationBean 进行实现,
同时将跨域过滤器 CorsFilter 的优先级设置为最高(最先执行), 保证了跨域的有效性
注意: 该类启用的前置条件为标注了
@EnableGlobalCorsConfig 注解@Validated 注解验证时使用
在 javax.validation.constraints 包下的注解中加入分组,
同时在 @Validated 中加入同一分组类,
则可以只验证指定分组(当指定了分组后不会验证默认没有分组的数据)Jackson 的常用功能
已默认配置的如下:
BigInteger 自动序列化为 String 字符串
Long 自动序列化为 String 字符串
Date 自动序列化为 yyyy-MM-dd HH:mm:ss 字符串
LocalDateTime 自动序列化为 yyyy-MM-dd HH:mm:ss 字符串
LocalDate 自动序列化为 yyyy-MM-dd 字符串
LocalTime 自动序列化为 HH:mm:ss 字符串
该类采用 Jackson2ObjectMapperBuilderCustomizer 的原因是默认 Jackson 已存在一些默认配置内容,
通过此种方式可以实现在不修改默认配置的情况下插入我们自定义的配置JwtUtils
userId: 用户ID
internal: 是否为系统内置
@ApiOperation 注解的方法记录相关请求与响应数据
注意: 该类启用的前提条件为标注了 @EnableControllerLogAspect 注解@EnableLogSave 注解使用, 当开启了 @EnableLogSave 后,
在 [Controller] 方法上标注该注解, 从而实现日志持久化记录
注意: 需要自定义类继承 AbstractLogSave 抽象类,
在自定义类中实现响应持久化逻辑AbstractLogSave 抽象类
注意: 该类启用的前置条件为标注了 @EnableLogSave 注解ModelMapper 对象Optional 类进行封装, 更加方便处理项目中空指针的问题PageDTOPageable 的默认实现, 用于项目中所有分页相关功能数据传输, 原则上所有分页相关功能均使用此类SimplePageRequestPageDetailVO 说明,
使用时必须使用 ResultVO 中相关方法进行返回HttpServletRequest 与 Method 参数, 返回该请求相关的信息ThreadLocal 底层使用的内部类 ThreadLocalMap 实现的, 生命周期为当前线程,
所以不执行此方法当线程终止后 ThreadLocalMap 中的值会被JVM垃圾回收,
但推荐在不需要使用的时候显性的执行此方法, 便于理解HttpServletRequest 中 inputStream 流只能被读取一次问题
在处理表单请求时需要注意, 如果带有文件将会调用 HttpServletRequest.getParts() 拿到文件域,
最终会调用 Request.getParts() 方法, 核心为 getParts() 方法中的 parseParts(boolean) 方法,
在 parseParts(boolean) 方法中将会使用 FileUploadBase.parseRequest(RequestContext) 方法进行解析文件,
在 parseRequest(RequestContext) 方法中取出输入流, 所以如果为非 json 请求时不进行任何操作
Warning: 在提前使用 RepeatRequestWrapper.getInputStream() 方法时依然需要谨慎使用
(建议提前使用 RequestUtils.isJsonRequest(HttpServletRequest)) 判断该请求是否为 json 请求@ApiOperation 注解的方法开启请求超时切面监听
注意: 该类启用的前提条件为标注了 @EnableControllerTimeoutAspect 注解BaseVO 下所有实现keyword 字段用于查询参数ResultVO 中相关方法进行返回SwaggerInfo 创建 Docket 对象
该类指定了部分默认参数, 如需自定义在参数 SwaggerInfo 中进行赋值相关属性即可
注意: 请求地址中带有 [common] 字段时 SecurityContext 上下文将不生效uuidif/else 语句
客户端异常枚举包: pro.haichuang.framework.base.enums.error.client
客户端自定义异常包: pro.haichuang.framework.base.exception.client
服务端异常枚举包: pro.haichuang.framework.base.enums.error.server
服务端自定义异常包: pro.haichuang.framework.base.exception.server
RequestParam
捕获来自 RequestParamRequestParam
捕获来自 javax.validation.constraintsRequestBody
Also throw to InvalidFormatExceptionRequestBody
捕获来自 javax.validation.constraintsWebMvc 配置Copyright © 2021 HaiChuang Inc.. All rights reserved.