`Content-Type` der REST-Antwort ist konfigurierbar
authorKai Moritz <kai@juplo.de>
Mon, 7 Apr 2025 20:30:32 +0000 (22:30 +0200)
committerKai Moritz <kai@juplo.de>
Wed, 21 May 2025 18:14:13 +0000 (20:14 +0200)
docker/docker-compose.yml
src/main/java/de/juplo/kafka/ApplicationProperties.java
src/main/java/de/juplo/kafka/DeadLetterController.java
src/main/resources/application.yml

index 081cd2f..27eaac2 100644 (file)
@@ -166,6 +166,7 @@ services:
       juplo.bootstrap-server: kafka:9092
       juplo.client-id: ute
       juplo.consumer.topic: test
+      juplo.controller.media-type: text/plain
     ports:
       - 8881:8881
 
index ee3d107..626db84 100644 (file)
@@ -5,6 +5,7 @@ import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
 import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
 
 
@@ -22,13 +23,15 @@ public class ApplicationProperties
   private String clientId;
 
   @NotNull
-  private ConsumerProperties consumer;
+  private ApplicationProperties.Consumer consumer;
+  @NotNull
+  private ApplicationProperties.Controller controller;
 
 
   @Validated
   @Getter
   @Setter
-  static class ConsumerProperties
+  static class Consumer
   {
     @NotNull
     @NotEmpty
@@ -40,4 +43,14 @@ public class ApplicationProperties
     @NotEmpty
     private String headerPrefix;
   }
+
+  @Validated
+  @Getter
+  @Setter
+  static class Controller
+  {
+    @NotNull
+    @NotEmpty
+    private MediaType mediaType;
+  }
 }
index 64553ea..c0d1392 100644 (file)
@@ -2,8 +2,8 @@ package de.juplo.kafka;
 
 import de.juplo.kafka.exceptions.NonExistentPartitionException;
 import org.apache.kafka.clients.consumer.OffsetOutOfRangeException;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.util.UriUtils;
@@ -15,8 +15,17 @@ import java.nio.charset.StandardCharsets;
 @RestController
 public class DeadLetterController
 {
-  @Autowired
-  DeadLetterConsumer deadLetterConsumer;
+  private final DeadLetterConsumer deadLetterConsumer;
+  private final MediaType mediaType;
+
+
+  public DeadLetterController(
+    DeadLetterConsumer deadLetterConsumer,
+    ApplicationProperties properties)
+  {
+    this.deadLetterConsumer = deadLetterConsumer;
+    this.mediaType = properties.getController().getMediaType();
+  }
 
 
   @GetMapping(path = "/{partition}/{offset}")
@@ -28,6 +37,7 @@ public class DeadLetterController
       .requestRecord(partition, offset)
       .map(record -> ResponseEntity
         .ok()
+        .contentType(mediaType)
         .header(
           deadLetterConsumer.prefixed(DeadLetterConsumer.KEY),
           UriUtils.encodePathSegment(record.key(), StandardCharsets.UTF_8))
index 31bec84..652cc9c 100644 (file)
@@ -5,6 +5,8 @@ juplo:
     group-id: nodlt
     topic: test
     header-prefix: X-RECORD-
+  controller:
+    media-type: application/json
 management:
   endpoint:
     shutdown: