Kotlin & Spring boot 使用@Valid校验无效解决方法
2017-03-04 15:07
761 查看
kotlin data (对应java实体类
再来看controller
调用put方法,
原因分析:
在 java 中,将 validation 注解到实体类属性或者 get/set 方法上,但是在 kotlin 中,属性直接写在构造函数中,validation 注解并没有作用到属性上。
解决方法:
使用
将 kotlin data class 稍作修改:
之后,
再次执行
@Entity @Table(name = "user") data class User( @NotNull(message = "用户名不能为空") @Column(name = "user_name", nullable = false) var userName: String = "", @NotNull(message = "用户ID不能为空") @Column(name = "user_id", unique = true) var userId: String = "", @Email(message = "无效的邮箱") var email: String = "", @Column(nullable = false) var password: String = "" ) : Serializable
再来看controller
@RestController @RequestMapping("/user") class UserController { @Autowired lateinit var userRepository: UserRepository @PutMapping(value = "/put", consumes = arrayOf(MediaType.APPLICATION_JSON_UTF8_VALUE)) @ResponseBody fun put(@Valid @RequestBody user: SysUser): ResponseEntity<SysUser>? { if (result.hasErrors()) { val fieldErrors = result.fieldErrors for (fieldError in fieldErrors) { println("${fieldError.defaultMessage}") } return fieldErrors } println(user) return ResponseEntity .ok() .cacheControl(CacheControl.maxAge(30, TimeUnit.DAYS)) .eTag("AC") .body(user) } }
调用put方法,
@Valid校验无效
原因分析:
在 java 中,将 validation 注解到实体类属性或者 get/set 方法上,但是在 kotlin 中,属性直接写在构造函数中,validation 注解并没有作用到属性上。
解决方法:
使用
@field:标识符,
field标识符只允许在属性的访问器函数内使用。它能够 validation 校验注解作用与属性。
将 kotlin data class 稍作修改:
@Entity @Table(name = "user") data class User( @field:NotNull(message = "用户名不能为空") @Column(name = "user_name", nullable = false) var userName: String = "", @field:NotNull(message = "用户ID不能为空") @Column(name = "user_id", unique = true) var userId: String = "", @field:NotBlank(message = "邮箱不能为空") @field:Email(message = "无效的邮箱") var email: String = "", @field:NotBlank(message = "密码不能为空") @Column(nullable = false) var password: String = "" ) : Serializable
之后,
@Valid校验即可正常工作
再次执行
curl -v http://localhost:8080/user/put[/code]
看到错误信息{ "timestamp": "2017-03-04 13:54:19", "status": 400, "error": "Bad Request", "exception": "org.springframework.web.bind.MethodArgumentNotValidException", "errors": [ { "field": "userId", "rejectedValue": null, "bindingFailure": false, "objectName": "sysUser", "codes": [ "NotNull.sysUser.userId", "NotNull.userId", "NotNull.java.lang.String", "NotNull" ], "arguments": [ { "codes": [ "sysUser.userId", "userId" ], "arguments": null, "defaultMessage": "userId" } ], "defaultMessage": "用户ID不能为空" } ], "message": "Validation failed for object='sysUser'. Error count: 1", "path": "/user/put" }
相关文章推荐
- idea使用spring-boot-devTools无效的解决方法
- Spring Boot 与 kotlin 使用Thymeleaf模板引擎渲染web视图的方法
- Intellij IDEA 使用Spring-boot-devTools无效解决办法
- Intellij IDEA SpringBoot热部署 使用Spring-boot-devTools无效解决办法
- Intellij IDEA 使用Spring-boot-devTools无效解决办法
- 【转】Intellij IDEA 使用Spring-boot-devTools无效解决办法
- 【SpringBoot】拦截器使用@Autowired注入接口为null解决方法
- 关于spring切面使用<aop:aspectj-autoproxy/>报错的解决方法
- JAVA IIntelliJ IDEA(2)-----使用Spring-boot-devTools无效解决办法
- Intellij IDEA 使用Spring-boot-devTools无效解决办法
- 【SpringBoot】拦截器使用@Autowired注入接口为null解决方法
- Intellij IDEA 使用Spring-boot-devTools无效解决办法
- 使用IntelliJ IDEA 创建Spring Boot项目时 显示 connect timed out 解决方法
- Intellij IDEA 使用Spring-boot-devTools无效解决办法
- springBoot使用Controller读取配置文件两种方式&读取自定义配置方法
- spring boot使用内嵌的tomcat解决不安全的HTTP方法安全漏洞
- SpringBoot使用可能遇到的问题及解决方法
- SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
- 解决Intellij IDEA 使用Spring-boot-devTools无效的问题
- idea使用spring-boot-devtools无效解决办法