Add validator
This commit is contained in:
parent
30713ca8d5
commit
640d1313f9
4 changed files with 51 additions and 7 deletions
|
@ -23,6 +23,7 @@ dependencies {
|
||||||
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
|
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
|
||||||
implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
|
implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
|
||||||
implementation("org.springframework.boot:spring-boot-starter-web")
|
implementation("org.springframework.boot:spring-boot-starter-web")
|
||||||
|
implementation("org.springframework.boot:spring-boot-starter-validation")
|
||||||
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
|
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
|
||||||
implementation("org.jetbrains.kotlin:kotlin-reflect")
|
implementation("org.jetbrains.kotlin:kotlin-reflect")
|
||||||
implementation("org.xerial:sqlite-jdbc")
|
implementation("org.xerial:sqlite-jdbc")
|
||||||
|
|
|
@ -2,7 +2,10 @@ package com.example.demo.controllers
|
||||||
|
|
||||||
import com.example.demo.entities.User
|
import com.example.demo.entities.User
|
||||||
import com.example.demo.repositories.UserRepository
|
import com.example.demo.repositories.UserRepository
|
||||||
|
import jakarta.validation.Valid
|
||||||
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
|
import org.springframework.http.HttpStatus
|
||||||
|
import org.springframework.http.ResponseEntity
|
||||||
import org.springframework.web.bind.annotation.*
|
import org.springframework.web.bind.annotation.*
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
|
@ -21,14 +24,15 @@ class UsersController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/users")
|
@PostMapping("/users")
|
||||||
fun create(@RequestBody newUser: User): User {
|
fun create(@Valid @RequestBody newUser: User): ResponseEntity<User> {
|
||||||
return repo.save(newUser)
|
val user = repo.save(newUser)
|
||||||
|
return ResponseEntity(user, HttpStatus.CREATED)
|
||||||
}
|
}
|
||||||
|
|
||||||
@PatchMapping("/users/{id}")
|
@PatchMapping("/users/{id}")
|
||||||
fun update(@PathVariable id: Long, @RequestBody user: User): User {
|
fun update(@PathVariable id: Long, @Valid @RequestBody user: User): ResponseEntity<User> {
|
||||||
user.id = id
|
user.id = id
|
||||||
return repo.save(user)
|
return ResponseEntity(repo.save(user), HttpStatus.OK)
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/users/{id}")
|
@DeleteMapping("/users/{id}")
|
||||||
|
|
|
@ -3,8 +3,16 @@ package com.example.demo.entities
|
||||||
import jakarta.persistence.Entity
|
import jakarta.persistence.Entity
|
||||||
import jakarta.persistence.GeneratedValue
|
import jakarta.persistence.GeneratedValue
|
||||||
import jakarta.persistence.Id
|
import jakarta.persistence.Id
|
||||||
|
import jakarta.validation.constraints.Email
|
||||||
|
import jakarta.validation.constraints.NotEmpty
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
class User(
|
class User {
|
||||||
@Id @GeneratedValue var id: Long? = null,
|
@Id
|
||||||
var login: String)
|
@GeneratedValue
|
||||||
|
var id: Long? = null;
|
||||||
|
|
||||||
|
@NotEmpty(message = "Login can't be empty")
|
||||||
|
@Email(message = "The email address is invalid.")
|
||||||
|
lateinit var login: String;
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.example.demo.exceptions
|
||||||
|
|
||||||
|
import org.springframework.http.HttpHeaders
|
||||||
|
import org.springframework.http.HttpStatus
|
||||||
|
import org.springframework.http.HttpStatusCode
|
||||||
|
import org.springframework.http.ResponseEntity
|
||||||
|
import org.springframework.validation.FieldError
|
||||||
|
import org.springframework.web.bind.MethodArgumentNotValidException
|
||||||
|
import org.springframework.web.bind.annotation.ControllerAdvice
|
||||||
|
import org.springframework.web.context.request.WebRequest
|
||||||
|
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler
|
||||||
|
import java.util.stream.Collectors
|
||||||
|
|
||||||
|
|
||||||
|
@ControllerAdvice
|
||||||
|
class GlobalExceptionHandler : ResponseEntityExceptionHandler() {
|
||||||
|
|
||||||
|
override fun handleMethodArgumentNotValid(ex: MethodArgumentNotValidException, headers: HttpHeaders, status: HttpStatusCode, request: WebRequest): ResponseEntity<Any>? {
|
||||||
|
val body: MutableMap<String, List<String?>> = HashMap()
|
||||||
|
|
||||||
|
val errors = ex.bindingResult
|
||||||
|
.fieldErrors
|
||||||
|
.stream()
|
||||||
|
.map { obj: FieldError -> obj.defaultMessage }
|
||||||
|
.collect(Collectors.toList())
|
||||||
|
|
||||||
|
body["errors"] = errors
|
||||||
|
|
||||||
|
return ResponseEntity(body, HttpStatus.BAD_REQUEST)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue