Spring Boot:List 请求参数校验(Kotlin 版)

此文章发布于 27 个月前,部分信息可能已经过时,请自行斟酌确认。

问题描述

请求参数使用 List<T> 类型时,T 类型中定义的参数校验规则不生效。

参数类

data class ReqParam(
    @field:NotBlank(message = "姓名不能为空")
    val name: String?
)

控制器

@RequestMapping("valid")
fun valid(@Valid @RequestBody param: List<ReqParam>): R {
    return R.success("ok")
}

解决方案1

新定义一个包装类,如:ReqParamList
此方案需要每个接口都要单独写一个类,比较繁琐。

data class ReqParamList(
    @field:NotNull
    @field:Valid
    var list: List<ReqParam>?
)

解决方案2(推荐)

封装 ListParam 类

/**
 * List<T> 参数校验工具类,用于校验 List<T> 类型的请求参数
 *
 * @author xinggang
 * @create 2021-12-20
 */
class ListParam<E> : List<E> {

    @Valid
    private var list = ArrayList<E>()

    override val size: Int
        get() = list.size

    override fun isEmpty(): Boolean {
        return list.isEmpty()
    }

    override fun contains(element: E): Boolean {
        return list.contains(element)
    }

    override fun iterator(): MutableIterator<E> {
        return list.iterator()
    }

    fun add(e: E): Boolean {
        return list.add(e)
    }

    override fun containsAll(elements: Collection<E>): Boolean {
        return list.containsAll(elements)
    }

    override fun get(index: Int): E {
        return list[index]
    }

    override fun indexOf(element: E): Int {
        return list.indexOf(element)
    }

    override fun lastIndexOf(element: E): Int {
        return list.lastIndexOf(element)
    }

    override fun listIterator(): ListIterator<E> {
        return list.listIterator()
    }

    override fun listIterator(index: Int): ListIterator<E> {
        return list.listIterator(index)
    }

    override fun subList(fromIndex: Int, toIndex: Int): List<E> {
        return list.subList(fromIndex, toIndex)
    }

    fun getList(): List<E> {
        return list
    }

    fun setList(list: ArrayList<E>) {
        this.list = list
    }
}

控制器

@RequestMapping("validParam")
fun validParam(@Valid @RequestBody param: ListParam<ReqParam>): R {
    return R.success("ok")
}

测试效果:

20211220_165827.png

最后修改:2021 年 12 月 20 日 04 : 58 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论