首页 > 解决方案 > Gradle Spring mvc 验证数据类递归 Kotlin

问题描述

我需要创建一个递归验证,以便能够使用 Kotlin 在递归模式下验证 PizzaCreate 对象和基本属性。测试应该返回 400 但返回 200 ok(基本名称大小必须大于 2):

data class Base(@field:Length(min = 2, max = 100) val name:String)    

data class PizzaCreate(
    val id: Long,
    @field:Length(min = 2, max = 100) val name: String,
    val description: String,
    val price: Int,
    @Valid val base: Base

)

@RestController
@RequestMapping("/pizza")
class PizzaController(val pizzaService: PizzaService) {

@PostMapping
fun post(@RequestBody @Valid pizza: PizzaCreate) = pizzaService.addPizza(pizza)

}

  @Test
fun `should add pizza `() {

    val pizza = easyRandom.nextObject(PizzaCreate::class.java).copy(id = 1, name="aaa", base = Base(""))
    val pizzaOut = PizzaOut(id=1,name=pizza.name,description = pizza.description,price = pizza.price)

    `when`(pizzaService.addPizza(pizza)).thenReturn(pizzaOut.toMono())

    webTestClient.post()
            .uri("/pizza")
            .bodyValue(pizza)
            .exchange()
            .expectStatus().isBadRequest
            .returnResult<PizzaOut>().responseBody
}

标签: springvalidationspring-mvckotlin

解决方案


Base 上的验证应该@field:Valid val base: Base代替@Valid val base: Base

field:指定注释应用于非构造字段

参考:

https://stackoverflow.com/a/35853200

https://stackoverflow.com/a/36521309


推荐阅读