From dc3aa929216b26d46ce134ac98c279a68d5679c1 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Thu, 12 Mar 2026 11:23:32 +0100 Subject: feat: save error request for non json (#266) --- .../dnpm/etl/processor/input/KafkaInputListener.kt | 61 ++++++++++++---------- .../etl/processor/input/MtbFileRestController.kt | 17 ++++++ 2 files changed, 50 insertions(+), 28 deletions(-) (limited to 'src/main/kotlin/dev/dnpm/etl/processor') diff --git a/src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt b/src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt index 41c85ac..03cd03d 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt @@ -70,37 +70,42 @@ class KafkaInputListener( } private fun handleDnpmV2Message(record: ConsumerRecord) { - val mtbFile = objectMapper.readValue(record.value(), Mtb::class.java) - val patientId = PatientId(mtbFile.patient.id) - val firstRequestIdHeader = record.headers().headers("requestId")?.firstOrNull() - val requestId = - if (null != firstRequestIdHeader) { - RequestId(String(firstRequestIdHeader.value())) - } else { - RequestId("") - } - val firstRequestMethodHeader = record.headers().headers("requestMethod")?.firstOrNull() - val requestMethod = - if (null != firstRequestMethodHeader) { - String(firstRequestMethodHeader.value()) - } else { - "" - } + try { + val mtbFile = objectMapper.readValue(record.value(), Mtb::class.java) + val patientId = PatientId(mtbFile.patient.id) + val firstRequestIdHeader = record.headers().headers("requestId")?.firstOrNull() + val requestId = + if (null != firstRequestIdHeader) { + RequestId(String(firstRequestIdHeader.value())) + } else { + RequestId("") + } + val firstRequestMethodHeader = record.headers().headers("requestMethod")?.firstOrNull() + val requestMethod = + if (null != firstRequestMethodHeader) { + String(firstRequestMethodHeader.value()) + } else { + "" + } - if (requestMethod == "DELETE") { - logger.debug("Accepted MTB File and process deletion") - if (requestId.isBlank()) { - requestProcessor.processDeletion(patientId, TtpConsentStatus.UNKNOWN_CHECK_FILE) - } else { - requestProcessor.processDeletion(patientId, requestId, TtpConsentStatus.UNKNOWN_CHECK_FILE) - } - } else { - logger.debug("Accepted MTB File for processing") - if (requestId.isBlank()) { - requestProcessor.processMtbFile(mtbFile) + if (requestMethod == "DELETE") { + logger.debug("Accepted MTB File and process deletion") + if (requestId.isBlank()) { + requestProcessor.processDeletion(patientId, TtpConsentStatus.UNKNOWN_CHECK_FILE) + } else { + requestProcessor.processDeletion(patientId, requestId, TtpConsentStatus.UNKNOWN_CHECK_FILE) + } } else { - requestProcessor.processMtbFile(mtbFile, requestId) + logger.debug("Accepted MTB File for processing") + if (requestId.isBlank()) { + requestProcessor.processMtbFile(mtbFile) + } else { + requestProcessor.processMtbFile(mtbFile, requestId) + } } + } catch (e: Exception) { + logger.error("Error while processing MtbFile", e) + requestProcessor.processMtbFile(Mtb.builder().build()) } } } diff --git a/src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt b/src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt index 523a0a8..c9825c7 100644 --- a/src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt +++ b/src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt @@ -28,6 +28,7 @@ import dev.pcvolkmer.mv64e.mtb.Mtb import org.slf4j.LoggerFactory import org.springframework.http.MediaType import org.springframework.http.ResponseEntity +import org.springframework.http.converter.HttpMessageNotReadableException import org.springframework.web.bind.annotation.* @RestController @@ -67,3 +68,19 @@ class MtbFileRestController( return ResponseEntity.accepted().build() } } + +@RestControllerAdvice(assignableTypes = [MtbFileRestController::class]) +class MtbFileRestControllerAdvice( + private val requestProcessor: RequestProcessor +) { + + private val logger = LoggerFactory.getLogger(MtbFileRestControllerAdvice::class.java) + + @ExceptionHandler(HttpMessageNotReadableException::class) + fun handleMessageNotReadableException(e: Exception): ResponseEntity { + logger.error("Error while processing MtbFile", e) + requestProcessor.processMtbFile(Mtb.builder().build()) + return ResponseEntity.badRequest().build() + } + +} -- cgit v1.2.3