diff --git a/src/main/java/com/kingsrook/qqq/backend/core/utils/JsonUtils.java b/src/main/java/com/kingsrook/qqq/backend/core/utils/JsonUtils.java index b2dd056a..0ea4b8c3 100644 --- a/src/main/java/com/kingsrook/qqq/backend/core/utils/JsonUtils.java +++ b/src/main/java/com/kingsrook/qqq/backend/core/utils/JsonUtils.java @@ -1,6 +1,7 @@ package com.kingsrook.qqq.backend.core.utils; +import java.io.IOException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; @@ -63,6 +64,17 @@ public class JsonUtils } + /******************************************************************************* + ** + *******************************************************************************/ + public static T toObject(String json, Class targetClass) throws IOException + { + ObjectMapper objectMapper = newObjectMapper(); + T t = objectMapper.reader().readValue(json, targetClass); + return t; + } + + /******************************************************************************* ** diff --git a/src/test/java/com/kingsrook/qqq/backend/core/utils/JsonUtilsTest.java b/src/test/java/com/kingsrook/qqq/backend/core/utils/JsonUtilsTest.java index 4f86ff5d..69b05f43 100644 --- a/src/test/java/com/kingsrook/qqq/backend/core/utils/JsonUtilsTest.java +++ b/src/test/java/com/kingsrook/qqq/backend/core/utils/JsonUtilsTest.java @@ -1,16 +1,27 @@ package com.kingsrook.qqq.backend.core.utils; +import java.io.IOException; import java.io.Serializable; import java.math.BigDecimal; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; +import com.kingsrook.qqq.backend.core.model.actions.QCriteriaOperator; +import com.kingsrook.qqq.backend.core.model.actions.QFilterCriteria; +import com.kingsrook.qqq.backend.core.model.actions.QFilterOrderBy; +import com.kingsrook.qqq.backend.core.model.actions.QQueryFilter; import com.kingsrook.qqq.backend.core.model.data.QRecord; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /******************************************************************************* @@ -194,4 +205,30 @@ class JsonUtilsTest assertTrue(JsonUtils.looksLikeArray("\n\n\n [ \n]\n\n\n")); } + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + public void test_toObject() throws IOException + { + String json = JsonUtils.toJson(new QQueryFilter() + .withCriteria(new QFilterCriteria().withFieldName("id").withOperator(QCriteriaOperator.EQUALS).withValues(List.of(1))) + .withCriteria(new QFilterCriteria().withFieldName("name").withOperator(QCriteriaOperator.IN).withValues(List.of("Darin", "James"))) + .withOrderBy(new QFilterOrderBy().withFieldName("age").withIsAscending(true))); + + System.out.println(json); + + QQueryFilter qQueryFilter = JsonUtils.toObject(json, QQueryFilter.class); + assertEquals(2, qQueryFilter.getCriteria().size()); + assertEquals("id", qQueryFilter.getCriteria().get(0).getFieldName()); + assertEquals(QCriteriaOperator.EQUALS, qQueryFilter.getCriteria().get(0).getOperator()); + assertEquals(List.of(1), qQueryFilter.getCriteria().get(0).getValues()); + assertEquals("name", qQueryFilter.getCriteria().get(1).getFieldName()); + assertEquals(QCriteriaOperator.IN, qQueryFilter.getCriteria().get(1).getOperator()); + assertEquals(List.of("Darin", "James"), qQueryFilter.getCriteria().get(1).getValues()); + assertEquals(1, qQueryFilter.getOrderBys().size()); + assertEquals("age", qQueryFilter.getOrderBys().get(0).getFieldName()); + assertTrue(qQueryFilter.getOrderBys().get(0).getIsAscending()); + } } \ No newline at end of file