Spring boot SpringBoot GraphQL字段名不匹配
似乎Spring boot SpringBoot GraphQL字段名不匹配,spring-boot,graphql,graphql-java,Spring Boot,Graphql,Graphql Java,似乎.graphqls文件中定义的名称必须与POJO中的字段名称匹配。是否有一种方法可以对字段进行注释,这样他们就不必这样做 例如,我在graphqls文件中有类似的内容 type Person { personId: ID! name: String! } 那么在我的实体POJO中我有 @Id @Column(name="PERSON_ID") @JsonProperty("person_id") private int personId; @Column(name="
.graphqls
文件中定义的名称必须与POJO中的字段名称匹配。是否有一种方法可以对字段进行注释,这样他们就不必这样做
例如,我在graphqls文件中有类似的内容
type Person {
personId: ID!
name: String!
}
那么在我的实体POJO中我有
@Id
@Column(name="PERSON_ID")
@JsonProperty("person_id")
private int personId;
@Column(name="NAME")
@JsonProperty("name")
private String name;
因此,目的是将字段名设置为personId
,数据库将其存储为一个名为PERSON\u ID
的列,并将其序列化为JSON,将其序列化为PERSON\u ID
但是graphql使用的是模式语言。因此,它将其序列化为personId
,它与schema字段匹配,但不是目的。我可以将模式更改为person\u id
,但是我还需要更改字段。。。这并不是世界末日,但字段的命名方式非常“非javalike”
我正在使用这个库:
compile group: 'com.graphql-java', name: 'graphql-spring-boot-starter', version: '5.0.2'
我也在annotations库中看到了@GraphQLName
注释,但我肯定错过了一些东西,因为它没有达到我预期的效果,或者可能是我用错了
是否有办法解决这个问题,或者我应该更改名称?GraphQL Java默认使用
PropertyDataFetcher
解析字段值(请参阅)。当顶级字段数据获取程序返回的数据对象包含与数据对象属性名称匹配的子字段时,此数据获取程序即可用
但是,您可以为任何字段定义自己的数据获取程序,并使用您需要的任何规则
所以,如果你想要一个这样的模式
type Person {
person_id: ID!
name: String!
}
你的实体是这样的:
class Person {
private int personId;
private String name;
// getters and setters
}
您可以为字段personId
private RuntimeWiring buildWiring() {
return RuntimeWiring.newRuntimeWiring()
// query root data fetchers wiring
.type(newTypeWiring("Person")
.dataFetcher("person_id", environment -> {
Person person = environment.getSource();
return person.getPersonId();
})
)
// maybe other wirings
.build();
}
这太愚蠢了。对于每个要显式命名字段的字段,不需要十几行代码。杰克逊做对了,JPA,等等。。。为什么GraphQL很难实现?您还可以创建一个与模式匹配的新POJO,并在主数据获取程序中将数据转换为该POJO。