【发布时间】:2021-05-26 17:06:31
【问题描述】:
我需要创建一个递归验证,以便能够使用 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
}
【问题讨论】:
-
base.name 是
aaa所以它是正确的。尝试使用 base.name 等于a,然后您应该会看到 400。 -
base = Base("") 基本名称是 "" 而不是 aaa(aaa 是 PizzaCreate 名称值)。我正在尝试强制基名递归验证
标签: spring validation spring-mvc kotlin