diff --git a/src/WireMock.Net.Minimal/Settings/WireMockServerSettingsParser.cs b/src/WireMock.Net.Minimal/Settings/WireMockServerSettingsParser.cs index e862389c..af3a8c00 100644 --- a/src/WireMock.Net.Minimal/Settings/WireMockServerSettingsParser.cs +++ b/src/WireMock.Net.Minimal/Settings/WireMockServerSettingsParser.cs @@ -276,7 +276,7 @@ public static class WireMockServerSettingsParser var defaultJsonBodyTransformer = parser.GetStringValue(nameof(WireMockServerSettings.DefaultJsonBodyTransformer)); settings.DefaultJsonBodyTransformer = defaultJsonBodyTransformer switch { - nameof(SystemTextJsonBodyTransformer) => new SystemTextJsonBodyTransformer(), + nameof(SystemTextJsonBodyTransformer) => new SystemTextJsonBodyTransformer(settings), _ => new NewtonsoftJsonBodyTransformer(settings), }; } diff --git a/src/WireMock.Net.Shared/Transformers/NewtonsoftJsonBodyTransformer.cs b/src/WireMock.Net.Shared/Transformers/NewtonsoftJsonBodyTransformer.cs index 1765fcd3..920b05fa 100644 --- a/src/WireMock.Net.Shared/Transformers/NewtonsoftJsonBodyTransformer.cs +++ b/src/WireMock.Net.Shared/Transformers/NewtonsoftJsonBodyTransformer.cs @@ -86,6 +86,7 @@ public class NewtonsoftJsonBodyTransformer(WireMockServerSettings settings) : IJ } catch { + settings.Logger.Warn("Failed to parse string ''{0}'' as JSON. Returning the original string value.", stringValue); } } diff --git a/src/WireMock.Net.Shared/Transformers/SystemTextJsonBodyTransformer.cs b/src/WireMock.Net.Shared/Transformers/SystemTextJsonBodyTransformer.cs index df87e58b..66ee02df 100644 --- a/src/WireMock.Net.Shared/Transformers/SystemTextJsonBodyTransformer.cs +++ b/src/WireMock.Net.Shared/Transformers/SystemTextJsonBodyTransformer.cs @@ -6,6 +6,7 @@ using System.Text.Json.Nodes; using HandlebarsDotNet.Helpers.Models; using JetBrains.Annotations; using JsonConverter.System.Text.Json; +using WireMock.Settings; using WireMock.Types; using WireMock.Util; @@ -15,7 +16,7 @@ namespace WireMock.Transformers; /// JSON body transformer implementation based on System.Text.Json. /// [PublicAPI] -public class SystemTextJsonBodyTransformer() : IJsonBodyTransformer +public class SystemTextJsonBodyTransformer(WireMockServerSettings settings) : IJsonBodyTransformer { private static readonly SystemTextJsonConverter _jsonConverter = new(); @@ -85,7 +86,7 @@ public class SystemTextJsonBodyTransformer() : IJsonBodyTransformer } catch { - // Ignore and return as string. + settings.Logger.Warn("Failed to parse string ''{0}'' as JSON. Returning the original string value.", stringValue); } } diff --git a/test/WireMock.Net.Tests/Transformers/JsonBodyTransformerTests.cs b/test/WireMock.Net.Tests/Transformers/JsonBodyTransformerTests.cs index 8c0e2530..1de0db5d 100644 --- a/test/WireMock.Net.Tests/Transformers/JsonBodyTransformerTests.cs +++ b/test/WireMock.Net.Tests/Transformers/JsonBodyTransformerTests.cs @@ -19,15 +19,17 @@ public class JsonBodyTransformerTests { get { + var settings = new WireMockServerSettings(); + return [ new JsonBodyTransformerTestContext( - () => new NewtonsoftJsonBodyTransformer(new WireMockServerSettings()), + () => new NewtonsoftJsonBodyTransformer(settings), JObject.Parse, body => ((JToken)body).ToString(Formatting.None)), new JsonBodyTransformerTestContext( - () => new SystemTextJsonBodyTransformer(), + () => new SystemTextJsonBodyTransformer(settings), json => JsonNode.Parse(json)!, body => ((JsonNode)body).ToJsonString()) ];