JSON中Int字段的Kotlin + Spring Boot默认值

尼卡蒂克斯

我正在用Kotlin + Spring Boot + Hibernate编写简单的CRUD,并想到了这个问题:

我有一个领域User类中调用age和类型Int

import javax.persistence.*
import javax.validation.constraints.NotBlank
import javax.validation.constraints.Size

@Entity
@Table(name = "users")
data class User(
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        val id: Long,

        @NotBlank
        @Column(unique = true)
        @Size(min = 1, max = 100)
        val username: String,

        @NotBlank
        @Size(max = 50)
        val firstName: String,

        @Size(max = 50)
        val lastName: String?,

        @Size(min = 1, max = 100)
        val age: Int
)

然后我有发布请求,该请求创建了一个用户

@PostMapping
fun post(@RequestBody user: User): User {
    log.debug("POST: {}", user)
    return userRepository.save(user)
}

问题是,当我错过ageJSON中的字段时,它不会响应400错误,而是默认为0

如何使该字段为必填字段?

尼卡蒂克斯

我通过这篇文章解决了这个问题,也感谢@Adam Arold展示了最佳做法。

我创建了新UserDTO类:

import ai.leavingstone.flywayspringdemo.domain.User
import javax.validation.constraints.*

data class UserDTO(
        private val id: Long = -1,

        @field:NotBlank
        @field:Size(min = 1, max = 100)
        private val username: String,

        @field:NotBlank
        @field:Size(max = 50)
        private val firstName: String,

        @field:Size(max = 50)
        private val lastName: String?,

        @field:NotNull
        private val age: Int?
) {

    fun toUser(): User = User(
            id,
            username,
            firstName,
            lastName,
            age!!
    )

}

在没有数据验证注释起作用之前,在添加@field前缀之后它可以正常工作。@NotNullonInt也可以使用,并且该id字段的默认值也是如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在列表Spring Boot中设置默认值

输入字段中的默认值与 thymeleaf 中的文本区域(spring boot)

如何在Spring Boot请求参数中使用的类中的字段值上设置默认值

在spring-boot中为logback属性指定默认值

Spring Boot不会从application.properties文件中读取默认值

Spring JPA-枚举中枚举字段的默认值

Spring Rest jackson 与 lombok 返回字段的默认值

使spring @Value从静态字段获取默认值

Spring Hibernate mysql:字段“ id”没有默认值

具有预设默认值的 Spring Boot 配置?

Spring @Async中的默认值是什么?

在Spring Data JPA查询中默认值?

字段的默认值

是否有任何Spring注释可以为字段(Mongo)设置默认值?

具有默认值的Kotlin数据类上的Spring构造函数注释

Spring Boot中的花括号默认属性值

Spring boot + Thymeleaf - 具有回退到默认值的多个模板解析器

Spring Boot Banner打印后如何将终端颜色恢复为默认值

Java-日期,格式,时区和Spring Boot默认值

为什么 Spring Boot 父启动器会修改 surefire 默认值?

使用Spring Boot @Configuraion和@Value初始化javafx的TextField的默认值

一个从属Spring Boot项目application.properties不注入默认值

在 Spring Boot 中使用 @Bean 配置设置类属性的默认值

Spring Data Rest不会更新数据库中的默认值

为什么在基于注释的Spring应用程序@Value中,默认值被解析为null?

如何覆盖Spring Cloud Ribbon中的ribbon.serverListRefreshInterval默认值?

Spring Cloud Stream 应用程序中的 timestampExtractorBeanName 设置不会覆盖默认值

spring-cloud-consul:无法覆盖ConsulProperties中的默认值

Avro字段默认值