gpt4 book ai didi

java - graphql-spqr无法查询父类字段

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:23 24 4
gpt4 key购买 nike

我尝试使用多态性来实现实体类。

这是我的BaseEntity

@Getter
@Setter
@Accessors(chain = true)
@MappedSuperclass
@NoArgsConstructor
@AllArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Size(max = 55, message = "name length more then 55")
private String name;

@Size(max = 255, message = "remark length more than 255")
private String remark;

}

还有我的实体

@Data
@NoArgsConstructor
@Table(name = "sys_user")
@Entity(name = "sys_user")
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class SysUser extends BaseEntity implements Serializable {

@NonNull
private String username;

@NonNull
private String password;

}

在我的 Controller 中

@Controller
@GraphQLApi
@RequiredArgsConstructor
public class SysUserController implements BaseController {

private final SysUserRepository sysUserRepository;

@GraphQLQuery
public List<SysUser> sysUsers() {
return sysUserRepository.findAll();
}

}

我的 GraphQL 配置

@Configuration
@RequiredArgsConstructor
public class GraphQLConfig {

private final @NotNull List<BaseController> controllerLists;

@Bean
public GraphQLSchema graphqlSchema() {
GraphQLSchemaGenerator generator = new GraphQLSchemaGenerator();
generator.withOperationsFromSingletons(controllerLists.toArray());
return generator.generate();
}

}

现在,我尝试得到

{
sysUsers {
username
}
}

结果是正确的

{
"data": {
"sysUsers": [
{
"username": "Hello"
}
]
}
}

但我尝试获取父类字段:

{
sysUsers {
name
}
}

我会收到一个错误

{
"errors": [
{
"message": "Validation error of type FieldUndefined: Field 'name' in type 'SysUser' is undefined @ 'sysUsers/name'",
"locations": [
{
"line": 3,
"column": 5
}
]
}
]
}

我使用io.leangen.graphql:graphql-spqr-spring-boot-starter:0.0.4

如何解决这个问题?

谢谢!

最佳答案

继承的字段仅在已配置的包内时才会公开。这样,您就不会意外暴露框架字段、JDK 字段(如 hashCode)等。如果没有配置基础包,SPQR 将保留在直接暴露的类所在的包中。

要配置基础包,请添加如下内容:

graphql.spqr.base-packages=your.root.package,your.other.root.package

到您的application.properties文件。

注意:这些 rules will get relaxed in the next release of SPQR ,因此默认情况下会公开所有非 JDK 字段,因为当前的行为似乎让太多人感到困惑。

关于java - graphql-spqr无法查询父类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58668078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com