Spring Boot:@requestBody 获取多个参数并进行验证

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

客户端请求的 Json 参数被封装到了一个变量中,如下可以看到是用 FaceResults 存放的数组。

{
    "FaceResults": [
        {
            "DeviceName": "DOX-A-HH01@XB01",
            "SerialNumber": "11120C4UUF2102350C00",
            "FaceAttr": {
                "AgeUpLimit": 40,
                "AgeLowerLimit": 20,
                "Gender": 1,
                "GlassStyle": 0,
                "Mask": 2
            },
            "BigImageURL": "/alarm/face/2020-09.jpg",
        }
    ]
}

服务端收到参数后需要对其进行校验,可通过以下方式。

解决方案一(基于 Kotlin)

服务端接收的话需要建如下类:

/**
 * 请求参数包装类
 *
 * @author xinggang
 * @create 2021-10-01
 */
data class FaceResultWrapperParam(
    @JsonProperty("FaceResults")
    @field:NotNull
    @field:Valid
    var FaceResults: List<FaceResultParam>? = null
)
data class FaceResultParam(

    @JsonProperty("DeviceName")
    @field:NotEmpty
    var DeviceName: String? = null
    
    //其它属性
)

控制器

@PostMapping("/reportFaceResult")
fun reportFaceResult(@Validated @RequestBody param: FaceResultWrapperParam): ResMsg {

    return success(param)
}

解决方案二

使用 Map<String, Object> 接受 request body,自己反序列化到各个 entity 中。

此文内容基于 Kotlin 语法,使用 Java 方案类似。

最后修改:2021 年 10 月 07 日 09 : 38 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论