Переглянути джерело

Adding Hateoas self links

dagarcos 2 роки тому
батько
коміт
4338be2727

+ 12 - 0
src/main/java/es/uv/garcosda/controllers/VideoController.java

@@ -1,5 +1,8 @@
 package es.uv.garcosda.controllers;
 
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
@@ -18,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+
 import es.uv.garcosda.domain.Video;
 import es.uv.garcosda.services.VideoService;
 
@@ -48,6 +52,10 @@ public class VideoController {
 			videos = vs.findByUserId(userId.get());
 		}
 		
+		for (Video v : videos) {
+			v.add(linkTo(methodOn(VideoController.class).findVideoById(v.getId().toString())).withSelfRel());
+		}
+		
 		return new ResponseEntity<List<Video>>(videos, HttpStatus.OK);
 	}
 	
@@ -60,6 +68,8 @@ public class VideoController {
 			return new ResponseEntity<Video>(new Video(), HttpStatus.OK);
 		}
 		else {
+			Video v = video.get();
+			v.add(linkTo(methodOn(VideoController.class).findVideoById(id)).withSelfRel());
 			return new ResponseEntity<Video>(video.get(), HttpStatus.NOT_FOUND);
 		}
 	}
@@ -68,7 +78,9 @@ public class VideoController {
 	public ResponseEntity<Video> createVideo(@RequestBody Video video) {
 		LOGGER.debug("Create video");
 		Video createdVideo = vs.create(video);
+		
 		if(createdVideo.getId() != null) {
+			createdVideo.add(linkTo(methodOn(VideoController.class).findVideoById(createdVideo.getId().toString())).withSelfRel());
 			return new ResponseEntity<Video>(createdVideo, HttpStatus.OK);
 		}
 		else {

+ 2 - 1
src/main/java/es/uv/garcosda/domain/Video.java

@@ -5,6 +5,7 @@ import java.util.Date;
 import java.util.UUID;
 
 import org.hibernate.annotations.GenericGenerator;
+import org.springframework.hateoas.RepresentationModel;
 
 import jakarta.persistence.Column;
 import jakarta.persistence.Entity;
@@ -18,7 +19,7 @@ import jakarta.persistence.TemporalType;
 
 @Entity
 @Table(name = "videos")
-public class Video implements Serializable {
+public class Video extends RepresentationModel<Video> implements Serializable {
 	
 	private static final long serialVersionUID = 1L;