Kotlin Spring Bean Validation - поля, допускающие значение NULL, аннотированные @field: NotNull в проверенной форме, все еще обрабатываются как допускающие значение NULL

В моем приложении Spring, созданном с помощью Kotlin, я использую проверку bean-компонентов в классе данных OfferForm ниже. Как вы можете видеть, все поля моей OfferForm допускают значение NULL, так что проверка может начаться, а не исключение, которое генерируется из-за того, что поля имеют значение NULL.

Однако моя проблема заключается в том, что, хотя проверка в моем OfferForm гарантирует, что поля не будут нулевыми после проверки @field:NotNull - когда я пытаюсь создать предложение (объект домена) из этой проверенной формы, поскольку поля имеют подписи, допускающие значение NULL (даже если они были проверены как ненулевые), я все равно получаю сообщение об ошибке из-за возможных значений NULL при попытке заполнить объект Offer ниже в методе контроллера.

Как вы можете видеть в контроллере, форма была проверена с помощью @Valid. Есть ли способ использовать Spring, чтобы он знал, что поля не допускают значения NULL, и не вызывал ошибок при попытке преобразовать OfferForm в Offer.

Также я не ищу ответов, включающих !! оператор - вместо этого я ищу решение, в котором Framework понимает, что эти поля не могут быть пустыми из-за только что проведенной проверки.

Любая помощь будет принята с благодарностью - спасибо.

OfferForm -

data class OfferForm(

    @field:NotNull
    var offerName: String?,

    @field:NotNull
    @field:DateTimeFormat(pattern = ISO_DATE_FORMAT)
    @field:NotPast
    var expiryDate: LocalDate?,

    @field:NotNull
    var type: OfferType?,
) {
    fun toOffer() = Offer(
        offerName = this.offerName, // Error saying offerName can't be nullable
        expiryDate = this.expiryDate, // Error saying expiryDate can't be nullable
        type = this.type // Error saying type can't be nullable
    )
}

OfferController

@PostMapping("/offers")
@ResponseBody
fun createOffer(@RequestBody @Valid offerForm: OfferForm): ResponseEntity<Offer> {

    val offer = offerService.create(offerForm.toOffer())
    return ResponseEntity(offer)

0 ответов

Другие вопросы по тегам