美文网首页架构
spring项目结构设计-通用返回数据接口

spring项目结构设计-通用返回数据接口

作者: jinelei | 来源:发表于2020-05-13 16:42 被阅读0次

通用的返回值接口BasicResult,泛型数据载体data,支持了hibernate数据校验、json格式、xml格式。

示例:
成功:BasicResult.BasicResultBuilder<TagEntity>().success(insertEntity).build()
失败:BasicResult.BasicResultBuilder<String?>().error(ex.getError()).data(ex.message).build()

尽量避免使用errCodeerrMsg手动设置错误码,会污染全局异常信息

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

相关文章

网友评论

    本文标题:spring项目结构设计-通用返回数据接口

    本文链接:https://www.haomeiwen.com/subject/dgtonhtx.html