Browse Source

Primer modelo de Feign implementado

Drowsito 1 month ago
parent
commit
9c59b99b57

+ 18 - 0
pom.xml

@@ -17,7 +17,20 @@
 	<properties>
 		<java.version>17</java.version>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<spring-cloud.version>2023.0.3</spring-cloud.version>
 	</properties>
+
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.springframework.cloud</groupId>
+				<artifactId>spring-cloud-dependencies</artifactId>
+				<version>${spring-cloud.version}</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
 	
 	<dependencies>
 		<dependency>
@@ -134,6 +147,11 @@
 		    <artifactId>commons-io</artifactId>
 		    <version>2.16.1</version>
 		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.cloud</groupId>
+			<artifactId>spring-cloud-starter-openfeign</artifactId>
+		</dependency>
 		<!-- 
 		<dependency>
 		    <groupId>org.jacoco</groupId> 

+ 2 - 0
src/main/java/es/uv/saic/SaicApplication.java

@@ -2,10 +2,12 @@ package es.uv.saic;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 @SpringBootApplication
 @EnableScheduling
+@EnableFeignClients
 public class SaicApplication {
 	
 	public static void main(String[] args) {

+ 23 - 0
src/main/java/es/uv/saic/feign/DocumentClient.java

@@ -0,0 +1,23 @@
+package es.uv.saic.feign;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import es.uv.saic.domain.Document;
+import es.uv.saic.dto.CategoriaDTO;
+
+@FeignClient(value = "document-service", url = "${saic.url.docs.domain}")
+public interface DocumentClient {
+    @PostMapping("/document/save")
+    Document save(@RequestBody Document doc);
+
+    @PostMapping("/findByCategoriaOrgan")
+    ResponseEntity<?> findByCategoriaOrgan(@RequestBody CategoriaDTO categoria);
+
+    @GetMapping("/document/{idDocument}")
+    ResponseEntity<?> findByID(@PathVariable("idDocument") Integer idDocument);
+}

+ 12 - 16
src/main/java/es/uv/saic/web/DocumentController.java

@@ -5,6 +5,9 @@ import java.net.http.HttpClient;
 import java.net.http.HttpRequest;
 import java.net.http.HttpResponse;
 
+import javax.print.Doc;
+
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -15,6 +18,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 
 import es.uv.saic.dto.CategoriaDTO;
 import es.uv.saic.dto.DocumentTmpDTO;
+import es.uv.saic.feign.DocumentClient;
 import es.uv.saic.domain.Document;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -28,6 +32,9 @@ public class DocumentController {
     private final HttpClient httpClient = HttpClient.newHttpClient();
     private final ObjectMapper mapper = new ObjectMapper();
 
+    @Autowired
+    private DocumentClient dc;
+
     /*
      * endpoint para save
      */
@@ -55,16 +62,10 @@ public class DocumentController {
     @PostMapping("/findByCategoriaOrgan")
     public ResponseEntity<?> findByCategoriaOrgan(@RequestBody CategoriaDTO categoria) {
         try {
-           HttpRequest request = HttpRequest.newBuilder()
-                .uri(URI.create(uriDocs + "/findByCategoriaOrgan"))
-                .header("Content-Type", "application/json")
-                .POST(HttpRequest.BodyPublishers.ofString(mapper.writeValueAsString(categoria)))
-                .build();
-
-            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
-            return ResponseEntity.status(response.statusCode()).body(response.body());
+            ResponseEntity<?> doc = dc.findByCategoriaOrgan(categoria);
+            return ResponseEntity.ok(doc);
         } catch (Exception e) {
-             e.printStackTrace();
+            e.printStackTrace();
             return ResponseEntity.badRequest().body("Error comunicando con servicio de documentos: " + e.getMessage());
         }
     }
@@ -75,13 +76,8 @@ public class DocumentController {
     @GetMapping("/document/{idDocument}")
     public ResponseEntity<?> findByID(@PathVariable Integer idDocument) {
         try {
-             HttpRequest request = HttpRequest.newBuilder()
-                .uri(URI.create(uriDocs + "/document/" + idDocument))
-                .GET()
-                .build();
-
-            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
-            return ResponseEntity.status(response.statusCode()).body(response.body());
+            ResponseEntity<?> doc = dc.findByID(idDocument);
+            return ResponseEntity.ok(doc);
         } catch (Exception e) {
             e.printStackTrace();
             return ResponseEntity.badRequest().body("Error comunicando con servicio de documentos: " + e.getMessage());