Update api json mapping to include null & empty values

This commit is contained in:
2023-05-25 10:22:04 -05:00
parent 76b102b811
commit 515e04ecfe
4 changed files with 72 additions and 12 deletions

View File

@ -28,6 +28,7 @@ import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
@ -62,11 +63,29 @@ public class JsonUtils
**
*******************************************************************************/
public static String toJson(Object object)
{
return (toJson(object, null));
}
/*******************************************************************************
** Serialize any object into a JSON String - with customizations on the Jackson
** ObjectMapper.
**
** Internally using jackson - so jackson annotations apply!
**
*******************************************************************************/
public static String toJson(Object object, Consumer<ObjectMapper> objectMapperCustomizer)
{
try
{
ObjectMapper mapper = newObjectMapper();
String jsonResult = mapper.writeValueAsString(object);
ObjectMapper mapper = newObjectMapper();
if(objectMapperCustomizer != null)
{
objectMapperCustomizer.accept(mapper);
}
String jsonResult = mapper.writeValueAsString(object);
return (jsonResult);
}
catch(JsonProcessingException e)

View File

@ -28,6 +28,7 @@ import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.kingsrook.qqq.backend.core.BaseTest;
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator;
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterCriteria;
@ -38,6 +39,7 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -68,6 +70,24 @@ class JsonUtilsTest extends BaseTest
/*******************************************************************************
**
*******************************************************************************/
@Test
public void test_toJsonQRecordInputWithNullValues()
{
QRecord qRecord = getQRecord();
String json = JsonUtils.toJson(qRecord, objectMapper ->
{
objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
});
assertThat(json).contains("""
"values":{"foo":"Foo","bar":3.14159,"baz":null}""");
}
/*******************************************************************************
**
*******************************************************************************/
@ -213,6 +233,7 @@ class JsonUtilsTest extends BaseTest
qRecord.setValues(values);
values.put("foo", "Foo");
values.put("bar", new BigDecimal("3.14159"));
values.put("baz", null);
return qRecord;
}