diff --git a/nop-core/src/main/java/io/nop/core/reflect/impl/BeanModelBuilder.java b/nop-core/src/main/java/io/nop/core/reflect/impl/BeanModelBuilder.java index 61900e404..60408b841 100644 --- a/nop-core/src/main/java/io/nop/core/reflect/impl/BeanModelBuilder.java +++ b/nop-core/src/main/java/io/nop/core/reflect/impl/BeanModelBuilder.java @@ -29,6 +29,7 @@ import io.nop.api.core.annotations.core.PropertySetter; import io.nop.api.core.annotations.data.DataBean; import io.nop.api.core.annotations.data.ImmutableBean; +import io.nop.api.core.annotations.graphql.GraphQLReturn; import io.nop.api.core.convert.ConvertHelper; import io.nop.api.core.exceptions.NopException; import io.nop.commons.util.ClassHelper; @@ -200,7 +201,7 @@ private void initDefaultValues(BeanModel beanModel) { Object defaultValue = propModel.getGetter() .getProperty(bean, propModel.getName(), DisabledEvalScope.INSTANCE); ((BeanPropertyModel) propModel).setDefaultValue(defaultValue); - }catch (Exception e){ + } catch (Exception e) { LOG.trace("nop.reflect.ignore-default-value-error", e); } } @@ -457,6 +458,10 @@ private void processPropAnnotations(BeanPropertyModel prop, IAnnotatedElement an BizObjName bizObjName = ann.getAnnotation(BizObjName.class); if (bizObjName != null) { prop.setBizObjName(bizObjName.value()); + } else { + GraphQLReturn graphQLReturn = ann.getAnnotation(GraphQLReturn.class); + if (graphQLReturn != null && !graphQLReturn.bizObjName().isEmpty()) + prop.setBizObjName(graphQLReturn.bizObjName()); } } diff --git a/nop-graphql/nop-graphql-core/src/test/java/io/nop/graphql/core/reflection/TestReflectionGraphQLTypeFactory.java b/nop-graphql/nop-graphql-core/src/test/java/io/nop/graphql/core/reflection/TestReflectionGraphQLTypeFactory.java new file mode 100644 index 000000000..ab8024f1d --- /dev/null +++ b/nop-graphql/nop-graphql-core/src/test/java/io/nop/graphql/core/reflection/TestReflectionGraphQLTypeFactory.java @@ -0,0 +1,31 @@ +package io.nop.graphql.core.reflection; + +import io.nop.api.core.annotations.graphql.GraphQLReturn; +import io.nop.core.reflect.hook.IPropGetMissingHook; +import io.nop.graphql.core.ast.GraphQLType; +import io.nop.graphql.core.schema.TypeRegistry; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class TestReflectionGraphQLTypeFactory { + @Test + public void testDynamicObjName() { + TypeRegistry registry = new TypeRegistry(); + GraphQLType type = ReflectionGraphQLTypeFactory.INSTANCE.buildGraphQLType(ResultBean.class, registry, false); + String source = registry.getType(type.getNamedTypeName()).toSource(); + System.out.println(source); + assertTrue(source.contains("[MyObject]")); + } + + public static class ResultBean { + List list; + + @GraphQLReturn(bizObjName = "MyObject") + public List getList() { + return list; + } + } +}