diff options
| author | Paul-Christian Volkmer | 2026-03-12 11:23:32 +0100 |
|---|---|---|
| committer | GitHub | 2026-03-12 11:23:32 +0100 |
| commit | dc3aa929216b26d46ce134ac98c279a68d5679c1 (patch) | |
| tree | d86a42a14ee8bd35046d4304fb30e618f56c6d17 /src/main/kotlin/dev/dnpm/etl | |
| parent | a8f8d5f137c9776a20b2bc91cd3bdd99c9b96991 (diff) | |
feat: save error request for non json (#266)
Diffstat (limited to 'src/main/kotlin/dev/dnpm/etl')
| -rw-r--r-- | src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt | 61 | ||||
| -rw-r--r-- | src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt | 17 |
2 files changed, 50 insertions, 28 deletions
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<String, String>) { - 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<Unit> { + logger.error("Error while processing MtbFile", e) + requestProcessor.processMtbFile(Mtb.builder().build()) + return ResponseEntity.badRequest().build() + } + +} |
