@Override
    @SneakyThrows
    public <T> T parseObject(String text, Class<T> clazz) {
        JavaType javaType = MAPPER.getTypeFactory().constructType(clazz);
        return MAPPER.readValue(text, javaType);
    }
@Test
    public void testParseObject() {
        // normal json to boolean
        Assertions.assertEquals(true, JACKSON_HANDLER.parseObject("true", Boolean.class));
        // normal json to double
        Assertions.assertEquals(0.01, JACKSON_HANDLER.parseObject("0.01", Double.class));
        // normal json to integer
        Assertions.assertEquals(1, JACKSON_HANDLER.parseObject("1", Integer.class));
        // normal json to string
        Assertions.assertEquals("hello world",
                JACKSON_HANDLER.parseObject("\"hello world\"", String.class));
        // normal json to object
        Assertions.assertEquals(EXPECTED_ENTITY, JACKSON_HANDLER.parseObject(EXPECTED_ENTITY_JSON, Entity.class));
        Assertions.assertEquals(
                EXPECTED_ENTITY,
                JACKSON_HANDLER.parseObject(EXPECTED_ENTITY_JSON, new TypeReference<Entity>() {
                }));
        // illegal json
        Assertions.assertThrows(MismatchedInputException.class,
                () -> JACKSON_HANDLER.parseObject(" ", Entity.class));
        // null json
        Assertions.assertThrows(IllegalArgumentException.class,
                () -> JACKSON_HANDLER.parseObject(null, Entity.class));
        // illegal type
        Assertions.assertThrows(MismatchedInputException.class,
                () -> JACKSON_HANDLER.parseObject(EXPECTED_ENTITY_JSON, String.class));
    }