private void assertIsObject(@NonNull final Object object, @NonNull final Class<?> clazz, final boolean allowValueToBeNull) {
        final Field[] fields = clazz.getDeclaredFields();
        if (object instanceof GenericObject) {
            final GenericObject genericObject = (GenericObject) object;
            for (Field field : fields) {
                if (excludeField(field)) {
                    continue;
                }
                if (!genericObject.hasField(field.getName())) {
                    fail(genericObject + " fieldName: " + field.getName() + " fieldType => " + field.getType().getName());
                }
                // not allow value is null
                if (!allowValueToBeNull) {
                    assertNotNull(genericObject.getField(field.getName()));
                    // value is not null, deep assert
                    assertIsObject(genericObject.getField(field.getName()), field.getType(), allowValueToBeNull);
                }
            }
        }
        if (object instanceof Map) {
            final Map<?, ?> map = (Map<?, ?>) object;
            for (Field field : fields) {
                if (excludeField(field)) {
                    continue;
                }
                if (!map.containsKey(field.getName())) {
                    fail(map + " fieldName: " + field.getName() + " fieldType => " + field.getType().getName());
                }
                // not allow value is null
                if (!allowValueToBeNull) {
                    assertNotNull(map.get(field.getName()));
                    assertIsObject(map.get(field.getName()), field.getType(), allowValueToBeNull);
                }
            }
        }
        if (object instanceof List) {
            for (Object o : (List<?>) object) {
                assertIsObject(o, clazz, allowValueToBeNull);
            }
        }
    }
assert object is target structure.<br>
<ul>
    <li>{@link GenericObject} structure is target structure.</li>
    <li>{@link Map} structure is target structure.</li>
    <li>{@link List} value structure is target structure.</li>
</ul>

@param object             object.
@param clazz              target structure.
@param allowValueToBeNull allow value to be Null. If the value is not null, the deep assertion
shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-rpc/shenyu-plugin-sofa/src/test/java/org/apache/shenyu/plugin/sofa/param/SofaBodyParamResolveServiceTest.java