【问题标题】:Gradle Spring mvc validation data class recursive KotlinGradle Spring mvc 验证数据类递归 Kotlin
【发布时间】: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


【解决方案1】:

Base 上的验证应该是 @field:Valid val base: Base 而不是 @Valid val base: Base

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

参考:

https://stackoverflow.com/a/35853200

https://stackoverflow.com/a/36521309

【讨论】:

  • 它就像一个魅力。我认为 field: 不是递归验证的必要条件。非常感谢您的快速响应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 2016-06-21
  • 2012-09-21
  • 1970-01-01
  • 2014-03-17
  • 2013-03-05
相关资源
最近更新 更多