Pārlūkot izejas kodu

RequestBody validation

Daniel Garcia Costa 2 gadi atpakaļ
vecāks
revīzija
7115b62de8

+ 5 - 0
pom.xml

@@ -33,6 +33,11 @@
 			<artifactId>spring-boot-starter-test</artifactId>
 			<scope>test</scope>
 		</dependency>
+		<dependency> 
+		    <groupId>org.springframework.boot</groupId> 
+		    <artifactId>spring-boot-starter-validation</artifactId> 
+		</dependency>
+		
 	</dependencies>
 
 	<build>

+ 27 - 1
src/main/java/es/uv/garcosda/controllers/BlogController.java

@@ -1,5 +1,6 @@
 package es.uv.garcosda.controllers;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.slf4j.Logger;
@@ -7,7 +8,10 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+import org.springframework.validation.FieldError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -19,6 +23,9 @@ import org.springframework.web.bind.annotation.RestController;
 import es.uv.garcosda.domain.Post;
 import es.uv.garcosda.domain.PostDTO;
 import es.uv.garcosda.services.PostService;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.ConstraintViolationException;
+import jakarta.validation.Valid;
 
 
 @RestController
@@ -46,7 +53,7 @@ public class BlogController {
 	}
 	
 	@PostMapping("posts")
-	public ResponseEntity<Post> create(@RequestBody PostDTO dto){
+	public ResponseEntity<Post> create(@Valid @RequestBody PostDTO dto){
 		Post p = ps.add(dto);
 		if(p.getId() != null) {
 			return new ResponseEntity<Post>(p, HttpStatus.OK);
@@ -87,4 +94,23 @@ public class BlogController {
 		}
 	}
 	
+	@ExceptionHandler(ConstraintViolationException.class)
+	public ResponseEntity<List<String>> validationError(ConstraintViolationException ex) {
+		List<String> msgs = new ArrayList<String>();
+		for(ConstraintViolation<?> v : ex.getConstraintViolations()) {
+			msgs.add(v.getPropertyPath().toString() + ": " + v.getMessage()); 
+		}
+	    return new ResponseEntity<List<String>>(msgs, HttpStatus.BAD_REQUEST);
+	}
+	
+	@ExceptionHandler(MethodArgumentNotValidException.class)
+	public ResponseEntity<List<String>> validationError(MethodArgumentNotValidException ex) {
+		List<String> msgs = new ArrayList<String>();
+		List<FieldError> errors = ex.getFieldErrors();
+		for(FieldError e : errors) {
+			msgs.add(e.getField() + ": " + e.getDefaultMessage()); 
+		}
+	    return new ResponseEntity<List<String>>(msgs, HttpStatus.BAD_REQUEST);
+	}
+	
 }

+ 1 - 0
src/main/java/es/uv/garcosda/domain/Post.java

@@ -2,6 +2,7 @@ package es.uv.garcosda.domain;
 
 import java.time.LocalDate;
 
+
 public class Post {
 
 	String id;

+ 3 - 1
src/main/java/es/uv/garcosda/domain/PostDTO.java

@@ -1,11 +1,13 @@
 package es.uv.garcosda.domain;
 
-import java.time.LocalDate;
+import jakarta.validation.constraints.NotNull;
 
 public class PostDTO {
 
+	@NotNull
 	String authorFirstname;
 	String authorLastname;
+	@NotNull
 	String title;
 	String content;