通用的返回值接口BasicResult
,泛型数据载体data
,支持了hibernate数据校验、json格式、xml格式。
示例:
成功:BasicResult.BasicResultBuilder<TagEntity>().success(insertEntity).build()
失败:BasicResult.BasicResultBuilder<String?>().error(ex.getError()).data(ex.message).build()
尽量避免使用
errCode
、errMsg
手动设置错误码,会污染全局异常信息
hibernate校验失败会抛出异常,应该在全局捕获,并避免死循环。
@Validated
@JacksonXmlRootElement(localName = "BasicResult")
data class BasicResult<T>(
@field:Min(value = 0, message = "errCode must bigger than 0")
@field:Max(value = 1000000, message = "errCode must smaller than 1000000")
@JacksonXmlProperty(localName = "ErrCode")
@JsonProperty(required = true)
val errCode: Int? = null,
@field:NotBlank(message = "errMsg must not be empty")
@JacksonXmlProperty(localName = "ErrMsg")
@JsonProperty(required = true)
val errMsg: String? = null,
@JacksonXmlProperty(localName = "Data")
@JsonProperty(required = true)
val data: T? = null
) {
constructor() : this(null, null, null)
class BasicResultBuilder<T> internal constructor() {
private var errCode: Int? = null
private var errMsg: String? = null
private var data: T? = null
fun error(error: ErrorIntf): BasicResultBuilder<T> {
errCode = error.errCode
errMsg = error.errMsg
return this
}
fun errCode(errCode: Int?): BasicResultBuilder<T> {
this.errCode = errCode
return this
}
fun errMsg(errMsg: String?): BasicResultBuilder<T> {
this.errMsg = errMsg
return this
}
fun data(data: T): BasicResultBuilder<T> {
this.data = data
return this
}
fun success(data: T): BasicResultBuilder<T> {
this.errCode = 0
this.errMsg = "success"
this.data = data
return this
}
fun build(): BasicResult<T> {
return BasicResult(errCode, errMsg, data)
}
}
override fun toString(): String {
return "BasicResult(errCode=$errCode, errMsg=$errMsg, data=$data)"
}
}
网友评论