使用Kotlin、Javax、Jakarta和Thymeleaf进行Spring验证

toe95027  于 2022-12-02  发布在  Spring
关注(0)|答案(1)|浏览(169)

我试图在Spring MVC中验证我的字段,我尝试了几种方法,但都不起作用。
我以前
implementation("org.springframework.boot:spring-boot-starter-validation"),然后是implementation("javax.validation:validation-api:2.0.1.Final")
我给这些类做了注解

@Data
data class Taco(
    @NotBlank
    @Size(min = 5, message = "Name must be at least 5 characters long")
    var name: String = "",
    @NotEmpty
    @Size(min = 1, message = "You must choose at least one ingredient")
    var ingredient: MutableList<Ingredients> = mutableListOf()
)

准备控制器

@PostMapping
    fun processTaco(
        @Valid taco: Taco,
        bindingResult: BindingResult,
        @ModelAttribute tacoOrder: TacoOrder,
    ): String {
        //In case there are errors based on the data object validations, return to the design page.
        if (bindingResult.hasErrors()) return "design"
        tacoOrder.addTaco(taco)
        println("Processing Taco:$taco")
        return "redirect:/orders/current"
    }

并实现了该设计

<div>
        <h3>Name your taco creation:</h3>
        <input type="text" th:field="*{name}"/>
        <span class="invalid-feedback"
              th:if="${#fields.hasErrors('name')}"
              th:errors="*{name}">name Error</span>
        <br/>
        <button>Submit Your Taco</button>
    </div>

但无法根据条件验证单个字段...如何做到这一点?
此致

vx6bjr1n

vx6bjr1n1#

经过几次尝试之后,我在控制器中以这种方式进行了验证检查

@PostMapping
    fun processTaco(
        taco: Taco,
        bindingResult: BindingResult,
        @ModelAttribute tacoOrder: TacoOrder,
    ): String {
        //In case there are errors based on the data object validations, return to the design page.
        checkTaco(taco, bindingResult)
        if (bindingResult.hasErrors()) return "design"
        tacoOrder.addTaco(taco)
        println("Processing Taco:$taco")
        return "redirect:/orders/current"
    }

    private fun checkTaco(taco: Taco, bindingResult: BindingResult) {
        if (taco.name.length < 5) bindingResult.addError(FieldError("name", "name", "Name Should be longer than 5 Characters."))
        if (taco.ingredient.isEmpty()) bindingResult.addError(FieldError("taco", "ingredient", "You should have at least once ingredient."))
    }

希望它对某些人有用。

相关问题