001/*- 002 * #%L 003 * Smile CDR - CDR 004 * %% 005 * Copyright (C) 2016 - 2026 Smile CDR, Inc. 006 * %% 007 * All rights reserved. 008 * #L% 009 */ 010package ca.cdr.api.model.json; 011 012import tools.jackson.core.JacksonException; 013import tools.jackson.core.JsonParser; 014import tools.jackson.databind.DeserializationContext; 015import tools.jackson.databind.JsonNode; 016import tools.jackson.databind.ObjectMapper; 017import tools.jackson.databind.ValueDeserializer; 018import tools.jackson.databind.json.JsonMapper; 019 020/** 021 * Sometimes, the JSON received in the additionalJson property of the TransactionLogEventJson may be nested. This Custom deserializer helps 022 * prevent the JSON parse error: "Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)" from occurring when 023 * additionalJson is being deserialized. 024 */ 025public class RawJsonDeserializer extends ValueDeserializer<String> { 026 private static final ObjectMapper mapper = 027 JsonMapper.builderWithJackson2Defaults().build(); 028 029 @Override 030 public String deserialize(JsonParser theParser, DeserializationContext theDeserializationContext) 031 throws JacksonException { 032 JsonNode node = mapper.readTree(theParser); 033 return mapper.writeValueAsString(node); 034 } 035}