首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

@RequestBody和@Valid不验证kotlin对象中的空字符串字段

@RequestBody和@Valid是Spring框架中常用的注解,用于处理HTTP请求的参数验证。

@RequestBody注解用于将HTTP请求的内容体映射到方法的参数上,常用于接收JSON或XML格式的请求数据。在Spring MVC中,它可以将请求体转换为Java对象,使得开发者可以方便地处理请求数据。

@Valid注解用于对请求参数进行验证,保证参数的有效性和合法性。它通常与Java Bean Validation(JSR 380)规范中的注解一起使用,如@NotNull、@NotBlank、@Size等。通过在参数上添加@Valid注解,Spring框架会自动触发验证过程,并返回验证结果。

对于Kotlin对象中的空字符串字段,默认情况下,@Valid注解是不会验证空字符串的。这是因为Kotlin中的字符串默认是可为空的,而JSR 380规范中的验证注解默认不会验证可为空的字段。

要在Kotlin对象中验证空字符串字段,可以使用@NotEmpty注解替代@NotBlank注解。@NotEmpty注解会同时验证字段不为空和不为空字符串。

举例来说,如果有一个Kotlin对象User:

代码语言:txt
复制
data class User(
    @field:NotEmpty
    val name: String,
    @field:NotEmpty
    val email: String
)

在Spring框架中,可以使用@Valid注解对User对象进行验证:

代码语言:txt
复制
@PostMapping("/users")
public void createUser(@Valid @RequestBody User user) {
    // 处理用户创建逻辑
}

对于空字符串字段name和email,@Valid注解会触发验证过程,确保它们既不为空也不为空字符串。

关于腾讯云相关产品和产品介绍,具体推荐信息可以参考腾讯云官方文档:

请注意,本回答仅提供了一种解决方案,具体选择和实施应根据实际情况和需求进行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何实现Java后端数据校验?看这篇就足够!

Size(max, min) 检查该字段size是否在minmax之间,可以是字符串、数组、集合、Map等 Length(max, min) 判断字符串长度 CreditCardNumber 被注释字符串必须通过...只能用于字符串不为null,并且字符串trim()以后length要大于0 NotEmpty 集合对象元素不为0,即集合不为,也可以用于字符串不为null Range(min=, max=) 被注释元素必须在合适范围内...嵌套验证 表示一个校验实体还嵌套者另一个待校验实体,需要同时对他们进行校验 分组校验 添加校验注解方式固然是方便,但是如果一个实体对象在不同业务校验规则不同的话,难道我们需要编写两个...objectVOList字段做非空校验,不会对CreateRoomInfoVO字段ObjectVO实体vipLevel字段做等级校验,也就是@Validated@Valid加在方法参数前,都不会自动对参数进行嵌套验证...能够用在成员属性(字段)上,提示验证框架进行嵌套验证。需要在黛娇妍对象注解@Valid进行嵌套验证

13.4K72

求求你别在用IF ELSE校验参数了

JSR 380——Bean Validation2.0——定义了用于实体方法验证元数据模型API,将数据校验逻辑通过注解形式封装在实体对象。 ?...@Valid:作为标准JSR-303规范,还没有吸收分组功能; @Valid:可以用在方法、方法参数、构造函数、方法参数成员属性(字段)上; @Valid加在方法参数时并不能够自动进行嵌套验证,而是用在需要嵌套验证相应字段上...1.在对象添加注解 @Data public class User { //注解对静态变量生效 @NotBlank(message = "性别不能为") private...@Valid注解即可(校验对静态变量生效),在使用 @Valid 注解参数后可以紧跟着一个 BindingResult 类型参数,用于获取校验结果(将校验结果封装在BingdingResult对象...") public String cascade(@Valid @RequestBody User2 user2){ return "OK"; } c.容器元素校验 用来校验实体对象内集合元素

1.9K10
  • 求求你别在用IF ELSE校验参数了

    JSR 380——Bean Validation2.0——定义了用于实体方法验证元数据模型API,将数据校验逻辑通过注解形式封装在实体对象。 ?...@Valid:作为标准JSR-303规范,还没有吸收分组功能; @Valid:可以用在方法、方法参数、构造函数、方法参数成员属性(字段)上; @Valid加在方法参数时并不能够自动进行嵌套验证,而是用在需要嵌套验证相应字段上...1.在对象添加注解 @Data public class User { //注解对静态变量生效 @NotBlank(message = "性别不能为") private...@Valid注解即可(校验对静态变量生效),在使用 @Valid 注解参数后可以紧跟着一个 BindingResult 类型参数,用于获取校验结果(将校验结果封装在BingdingResult对象...") public String cascade(@Valid @RequestBody User2 user2){ return "OK"; } c.容器元素校验 用来校验实体对象内集合元素

    1.7K20

    求求你别在用IF ELSE校验参数了

    JSR 380——Bean Validation2.0——定义了用于实体方法验证元数据模型API,将数据校验逻辑通过注解形式封装在实体对象。 ?...@Valid:作为标准JSR-303规范,还没有吸收分组功能; @Valid:可以用在方法、方法参数、构造函数、方法参数成员属性(字段)上; @Valid加在方法参数时并不能够自动进行嵌套验证,而是用在需要嵌套验证相应字段上...1.在对象添加注解 @Data public class User { //注解对静态变量生效 @NotBlank(message = "性别不能为") private...@Valid注解即可(校验对静态变量生效),在使用 @Valid 注解参数后可以紧跟着一个 BindingResult 类型参数,用于获取校验结果(将校验结果封装在BingdingResult对象...") public String cascade(@Valid @RequestBody User2 user2){ return "OK"; } c.容器元素校验 用来校验实体对象内集合元素

    1.8K20

    Validator,就来这一篇吧

    JSR 380——Bean Validation2.0——定义了用于实体方法验证元数据模型API,将数据校验逻辑通过注解形式封装在实体对象。 ?...@Valid:作为标准JSR-303规范,还没有吸收分组功能; @Valid:可以用在方法、方法参数、构造函数、方法参数成员属性(字段)上; @Valid加在方法参数时并不能够自动进行嵌套验证,而是用在需要嵌套验证相应字段上...1.在对象添加注解 @Data public class User { //注解对静态变量生效 @NotBlank(message = "性别不能为") private...@Valid注解即可(校验对静态变量生效),在使用 @Valid 注解参数后可以紧跟着一个 BindingResult 类型参数,用于获取校验结果(将校验结果封装在BingdingResult对象...") public String cascade(@Valid @RequestBody User2 user2){ return "OK"; } c.容器元素校验 用来校验实体对象内集合元素

    2.7K10

    Hibernate Validator校验

    对象级联校验 对象内部包含另一个对象作为属性,属性上加 @Valid,可以验证作为属性对象内部验证 5. 分组校验 5. 自定义校验器 ---- 1....注解 解释 01 @Null 检查该字段 02 @NotNull 不能为 null 03 @NotBlank 不能为,检查时会将空格忽略 04 @NotEmpty 不能为,这里是指空字符串...地址 12 @Past 检查该字段日期是否属于过去日期 13 @Future 检查该字段日期是否属于将来日期 14 @Length(min=,max=) 检查该字段长度是否在minmax之间...,只能用于字符串 15 @Size(min=,max=) 检查该字段size是否在minmax之间,可以是字符串、数组、集合、map等 16 @Min(value) 小于等于value 17 @Max...Valid 该注解只要用于字段为一个包含其他对象集合或map或数组字段,或该字段直接为一个其他对象引用(这样在检查当前对象同时也会检查该字段所引用对象) 7.

    89710

    JavaBean基于注解实现校验

    @Validated不能用在成员属性(字段)上,但是@Valid能加在成员属性(字段)上,而且@Valid类注解上也说明了它支持嵌套验证功能 6.如果一个bean包含第二个bean,这时要检验第二个bean...某个字段,即嵌套校验,必须要在第一个bean对象中使用@Valid标注到表示第二个bean对象字段上,然后再第二个bean对象里面的字段上加上校验类型. 7....@Valid:可以用在方法、构造函数、方法参数成员属性(字段)上 下面是我总结所有参数校验注解使用规则方法 检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null,...日期检查 @Past 验证 Date Calendar 对象是否在当前时间之前 @Future 验证 Date Calendar 对象是否在当前时间之后 @Pattern 验证 String 对象是否符合正则表达式规则... String 对象是否大等于指定值 @Max 验证 Number String 对象是否小等于指定值 @DecimalMax 被标注值必须不大于约束中指定最大值.

    1.1K20

    后端字段校验告别 if else,快来用下 @Valid 注解,省事又方便

    其中 @Validated 可以替换为 @Valid对象参数:对于对象参数来说,通常使用 @RequestBody 注解修饰。...分为三个步骤: 在 @RequestBody 注解前添加 @Valid,注意,必须是 @Valid 注解,@Validated 注解无效。...在对象实体类属性字段上,添加校验注解,比如 @NotEmpty、@Length 等。...在校验对象参数后面紧跟 BindingResult result 参数,@Valid 会将校验结果存储到 BindingResult 。如果没有,代码则会报异常。...@NotEmpty:验证注解元素值不为 null 且不为(字符长度、集合大小、map大小、数组长度不能为零) @NotBlank:验证注解元素值不为(不为null、去除首位空格后长度为0),不同于

    1.9K20

    Spring Validation实践及其实现原理

    常用注解 Bean Validation 2.0 注解 校验值 @Null:验证对象是否为 null @NotNull:验证对象是否不为 null @NotEmpty:验证对象不为 null,且长度(...数组、集合、字符串等)大于 0 @NotBlank:验证字符串不为 null,且去除两端空白字符后长度大于 0 校验大小 @Size(min=, max=):验证对象(数组、集合、字符串等)长度是否在给定范围之内...true @AssertFalse:验证 Boolean 对象是否为 false 校验日期时间 @Past:验证 Date Calendar 对象是否在当前时间之前 @Future:验证 Date... Calendar 对象是否在当前时间之后 @PastOrPresent:验证日期是否是过去或现在时间 @FutureOrPresent:验证日期是否是现在或将来时间 正则表达式 @Pattern...(regexp=, flags=):验证 String 对象是否符合正则表达式规则 Hibernate Validation 拓展 @Length(min=, max=):验证字符串大小是否在指定范围内

    44410

    @Validated@Valid区别

    属性额外加注释,只有@NotNull@Size 无论入参采用 @Validated 还是 @Valid验证 Spring Validation框架只会对Itemidprops做非和数量验证,...不会对props字段Prop实体进行字段验证 也就是@Validated@Valid加在方法参数前,都不会自动对参数进行嵌套验证。...由于@Validated不能用在成员属性(字段)上 但是@Valid能加在成员属性(字段)上,而且@Valid类注解上也说明了它支持嵌套验证功能 由此推断: @Valid加在方法参数时并不能够自动进行嵌套验证...@Validated@Valid加在方法参数前,都不会自动对参数进行嵌套验证 由于@Validated不能用在成员属性(字段)上 @Valid能加在成员属性(字段)上,而且@Valid类注解上也说明了它支持嵌套验证功能...所以,如果校验需要在实现上对象,进行嵌套验证实体内部对象,可以使用 @Valid 对实体属性进行嵌套校验!

    11720

    springboot使用hibernate validator校验

    一、参数校验  在开发中经常需要写一些字段校验代码,比如字段字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗长 每次要看哪些参数验证是否完整...,字段上注解+验证不通过提示信息即可代替手写一大堆字段限制验证代码。...验证请求参数时,在@RequestBody DemoModel demo之间加注解 @Valid,然后后面加BindindResult即可;多个参数,可以加多个@ValidBindingResult...对象内部包含另一个对象作为属性,属性上加@Valid,可以验证作为属性对象内部验证:(验证Demo2示例时,可以验证Demo2字段) @Data public class Demo2 {...(min=,max=)  被注释字符串大小必须在指定范围内      @NotEmpty   被注释字符串必须非      @Range(min=,max=,message=)  被注释元素必须在合适范围内

    5.7K50

    【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)

    为了避免重复这些验证,开发人员经常将验证逻辑直接捆绑到域模型,将域类与验证代码混在一起,而验证代码实际上是关于类本身元数据。...但是带有空格字符串校验不出来 @Size 用于对象(Array,Collection,Map,String)长度是否在给定范围之内 @Length 用于String对象大小必须在指定范围内 @Pattern...、方法参数成员属性(字段)上 可以加在成员属性(字段)上,能够独自完成级联校验 总结:@Validated用到分组时使用,一个学校对象里还有很多个学生对象需要使用@Validated在Controller...方法参数前加上,@Valid加在学校学生属性上,不加则无法对学生对象属性进行校验!...// 需要加上,否则不会验证student类校验注解 @NotNull // 且需要触发该字段验证才会进行嵌套验证

    81020

    SpringBoot+Spring常用注解总结

    一些常用字段验证注解 6.2. 验证请求体(RequestBody) 6.3. 验证请求参数(Path Variables Request Parameters) 7....设置字段类型 8.4. 指定持久化特定字段 8.5. 声明大字段 8.6. 创建枚举类型字段 8.7. 增加审计功能 8.8. 删除/修改数据 8.9. 关联关系 9....系统会使用HttpMessageConverter或者自定义HttpMessageConverter将请求 body json 字符串转换为 java 对象。...一些常用字段验证注解 @NotEmpty 被注释字符串不能为 null 也不能为 @NotBlank 被注释字符串非 null,并且必须包含一个非空白字符 @Null 被注释元素必须为 null...().body(id); } } 可以看出, 在验证 Path Variables Request Parameters上参数时,比验证 RequestBody参数,要在类上加 Validated

    93120

    Controller注解

    ”,required=”true/false”,defaultValue=””) value:参数名 required:是否包含该参数,默认为true,表示该请求路径必须包含该参数,如果包含就报错...不可省略 @RequestBody 作用:主要用来接收前端传递给后端json字符串数据(请求体数据) 可以在实体类字段上加 @JsonAlias实现:json转模型时,使json特定key...json时,对应转换后key为指定key @Valid 作用:用于验证注解是否符合要求 限制 说明 @Null 限制只能为null @NotNull 限制必须不为null @AssertFalse...@Size(max,min) 限制字符长度必须在min到max之间 @Past 验证注解元素值(日期类型)比当前时间早 @NotEmpty 验证注解元素值不为null且不为字符串长度不为0、集合大小不为...0) @NotBlank 验证注解元素值不为null且不为字符串长度不为0、集合大小不为0) @Email 验证注解元素值是Email,也可以通过正则表达式flag指定自定义email格式

    55010

    Springboot之分组验证以及自定义参数验证

    学习完简单验证之后发现基本能满足百分之80验证需求,接下来深入学习下验证。 分组验证 分组验证需要使用到@Validated 这个注解,是spring基于@Valid注解新增功能。...所以基本上在controller层接收参数时候,可以用@Validated注解替换@Valid。不过@Validated注解不能放在类字段上面,而@Valid注解可以放在类字段上面。...所以如果类某个字段不是基础类型,但是里面的参数需要校验的话,需要在字段上面加上@Valid 代码如下: /** * @author 海加尔金鹰 */ @Data public class TestVo...> testVos; //验证集合里面的TestVo ,不加上无法进行验证 分组验证:例如同一个参数,在新增时候,id传 但是在修改时候必传。...这个时候可以利用group来指定验证规则组 创建两个不同验证组: 关于是否继承默认验证组,建议都继承,如果继承,在验证时候只会验证指定字段 /** * @author 海加尔金鹰

    1.6K10

    hibernate-validator校验参数(统一异常处理)

    字符串则表示为字符串长度 @NotEmpty 被注释字符串必须非,可以为空格,空字符串,null @Range(min=, max=) 被注释元素必须在合适范围内 @NotBlank 被注释字符串必须非...此外,针对这种情形@Valid@Validated两个注解可以混用。 使用@Validated时也需要放在参数列表,放在类上放在方法上都会导致没有校验。...实际业务场景对象字段类型也是对象场景并不罕见。...@RequestBody Input input) { return ResponseEntity.ok("valid"); } } 注意:此时用@Valid@Validated...@Validated,不能用@Valid替换 此时生效是:@Null(groups = OnCreate.class),id必须为,userNamemobile不能为 五、自定义校验 有时官方提供注解规则不能满足我们需要

    1.4K20

    【Spring】SpringBoot10个参数验证技巧

    一些最常用验证注释包括: @NotNull:指定字段不能为。 @NotEmpty:指定列表字段不能为。 @NotBlank:指定字符串字段不得为或仅包含空格。...@Min @Max:指定数字字段最小值最大值。 @Pattern:指定字符串字段必须匹配正则表达式模式。 @Email:指定字符串字段必须是有效电子邮件地址。...每个帖子都应该有一个标题一个正文,并且标题在所有帖子应该是唯一。虽然 Spring Boot 提供了用于检查字段是否为内置验证注释,但它没有提供用于检查唯一性内置验证注释。...现在有一个包含三个字段User类情况下:firstName、lastNameemail。我们要确保如果 email 字段,则 firstName 或 lastName 字段必须非。...在处理程序方法,我们创建了一个 Map 对象来保存错误响应详细信息,包括时间戳、HTTP 状态代码错误消息列表。

    61040

    SpringBoot中使用注解对实体类属性进行校验

    检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0字符串 @NotBlank 检查约束字符串是不是...minmax区间内 ​ 日期检查 @Past 验证 Date Calendar 对象是否在当前时间之前 @Future 验证 Date Calendar 对象是否在当前时间之后...@Pattern 验证 String 对象是否符合正则表达式规则 ​ 数值检查,建议使用在Stirng,Integer类型,建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为...这个约束参数是一个通过BigDecimal定义最小值字符串表示.小数存在精度 @Digits 验证 Number String 构成是否合法 @Digits(integer...因为在前端传递过来数据可能是大量数据或者是一个对象,这样如果一个一个手写注解验证非常麻烦,此时就需要使用到这两个注解,这两个注解会递归对象每个实体类属性进行校验,当所有验证成功时候才会向下执行

    4.7K21

    Spring Boot 数据校验@Valid+统一异常处理

    在项目开发过程controller层方法入参检验存在一个问题,就是会对参数进行校验,于是有的人就开始各种if esle,并且会产生大量if else。...下面是我从别的博客收集所有参数校验注解使用规则方法 检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0字符串 @NotBlank 检查约束字符串是不是...日期检查 @Past 验证 Date Calendar 对象是否在当前时间之前 @Future 验证 Date Calendar 对象是否在当前时间之后 @Pattern 验证 String 对象是否符合正则表达式规则... String 对象是否大等于指定值 @Max 验证 Number String 对象是否小等于指定值 @DecimalMax 被标注值必须不大于约束中指定最大值....这个约束参数是一个通过BigDecimal定义最小值字符串表示.小数存在精度 @Digits 验证 Number String 构成是否合法 @Digits(integer=,fraction

    2.2K31

    Spring Validation

    () 验证字符串非 null,且长度必须大于 0 @Email 被注释元素必须是电子邮箱地址 @Length(min=,max=) 被注释字符串大小必须在指定范围内 @NotEmpty 被注释字符串必须非...但是不能用在成员属性(字段)上,且提供分组功能 @Valid:可以用在方法、构造函数、方法参数成员属性(字段)上 @RestController @Slf4j public class UserController...验证请求体 验证请求体(RequestBody),需要验证参数上加上了 @Valid 注解,如果验证失败,它将抛出 MethodArgumentNotValidException。...Service 方法 此外还可以验证任何 Spring 组件输入,而不是验证控制器级别的输入,我们可以使用 @Validated @Valid 注释组合来实现这一需求。...需求:Person 类有一个 region 字段,region 字段只能是 China、China-Taiwan、China-HongKong 这三个一个。

    43820
    领券