From a8e235c155758c25b3634b0451c1f06a1b58f00d Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Fri, 20 Sep 2024 09:59:59 -0500 Subject: [PATCH] CE-1727 - Update JSON serialization at the end of doProcessInitOrStep to specify to include null and empty values --- .../backend/javalin/QJavalinProcessHandler.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinProcessHandler.java b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinProcessHandler.java index 88d0f1de..5863716c 100644 --- a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinProcessHandler.java +++ b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinProcessHandler.java @@ -40,6 +40,7 @@ import java.util.Objects; import java.util.Optional; import java.util.UUID; import java.util.concurrent.TimeUnit; +import com.fasterxml.jackson.annotation.JsonInclude; import com.kingsrook.qqq.backend.core.actions.async.AsyncJobManager; import com.kingsrook.qqq.backend.core.actions.async.AsyncJobState; import com.kingsrook.qqq.backend.core.actions.async.AsyncJobStatus; @@ -432,7 +433,18 @@ public class QJavalinProcessHandler QJavalinAccessLogger.logEndSuccess(); } - context.result(JsonUtils.toJson(resultForCaller)); + /////////////////////////////////////////////////////////////////////////////////// + // Note: originally we did not have this serializationInclusion:ALWAYS here - // + // which meant that null and empty values from backend would not go to frontend, // + // which made things like clearing out a value in a field not happen. // + // So, this is added to get that beneficial effect. Unclear if there are any // + // negative side-effects - but be aware. // + // One could imagine that we'd need this to be configurable in the future? // + /////////////////////////////////////////////////////////////////////////////////// + context.result(JsonUtils.toJson(resultForCaller, mapper -> + { + mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS); + })); }