GraphQL SPQR:id 不应在创建时显示
GraphQL SPQR: id shall not be shown at creation
我将 GraphQL SPQR 与实体一起使用
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private UUID id;
@GraphQLNonNull
@GraphQLQuery(name = "a", description = "Any field")
private String a;
// Getters and Setters
}
和服务
@Service
@Transactional
public class MyService {
@Autowired
private MyRepository myRepository;
@GraphQLMutation(name = "createEntity")
public MyEntity createEntity(@GraphQLArgument(name = "entity") MyEntity entity) {
myRepository.save(entity);
return entity;
}
}
在 GraphiQL 中,我可以设置 id
:
mutation {
createEntity(entity: {
id: "11111111-2222-3333-4444-555555555555"
a: "any value"
}) {
id
}
}
但是 id
不能让用户编辑,因为它会被数据库覆盖。它只应在查询时显示。我尝试并添加了 @GraphQLIgnore
,但显示的 id
都一样。
如何在创建时隐藏 id
?
在 GraphQL-SPQR 0.9.9 及更早版本中,私有成员根本不会被扫描,因此私有字段上的注释通常不会执行任何操作。顺便说一句,Jackson(或 Gson,如果这样配置)用于发现输入类型的可反序列化字段,而那些库 do 查看私有字段,因此 some 注释似乎适用于输入类型。这就是您的情况。但是,@GraphQLIgnore
不是 可用于私有字段的注释。
您需要做的是将注释移动到 getter 和 setter。
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private UUID id;
@GraphQLIgnore //This will prevent ID from being mapped on the input type
//@JsonIgnore would likely work too
public void setId(UUID id) {...}
}
还有其他方法可以实现这一点,但这是最直接的。
注意:在 SPQR 的未来版本 (post 0.9.9) 中,也可以将注释放在私有字段上,但是混合(将一些注释放在一个字段上,一些放在相关的 getter/setter) 将不起作用。
我将 GraphQL SPQR 与实体一起使用
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private UUID id;
@GraphQLNonNull
@GraphQLQuery(name = "a", description = "Any field")
private String a;
// Getters and Setters
}
和服务
@Service
@Transactional
public class MyService {
@Autowired
private MyRepository myRepository;
@GraphQLMutation(name = "createEntity")
public MyEntity createEntity(@GraphQLArgument(name = "entity") MyEntity entity) {
myRepository.save(entity);
return entity;
}
}
在 GraphiQL 中,我可以设置 id
:
mutation {
createEntity(entity: {
id: "11111111-2222-3333-4444-555555555555"
a: "any value"
}) {
id
}
}
但是 id
不能让用户编辑,因为它会被数据库覆盖。它只应在查询时显示。我尝试并添加了 @GraphQLIgnore
,但显示的 id
都一样。
如何在创建时隐藏 id
?
在 GraphQL-SPQR 0.9.9 及更早版本中,私有成员根本不会被扫描,因此私有字段上的注释通常不会执行任何操作。顺便说一句,Jackson(或 Gson,如果这样配置)用于发现输入类型的可反序列化字段,而那些库 do 查看私有字段,因此 some 注释似乎适用于输入类型。这就是您的情况。但是,@GraphQLIgnore
不是 可用于私有字段的注释。
您需要做的是将注释移动到 getter 和 setter。
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private UUID id;
@GraphQLIgnore //This will prevent ID from being mapped on the input type
//@JsonIgnore would likely work too
public void setId(UUID id) {...}
}
还有其他方法可以实现这一点,但这是最直接的。
注意:在 SPQR 的未来版本 (post 0.9.9) 中,也可以将注释放在私有字段上,但是混合(将一些注释放在一个字段上,一些放在相关的 getter/setter) 将不起作用。