GraphQL SPQR:id不应在创建时显示



我将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,如果这样配置的话(用于发现输入类型上的可反序列化字段,而这些库确实查看私有字段,因此一些注释似乎适用于输入类型。这就是你的情况。但是,@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的未来版本(0.9.9后(中,也可以将注释放在私有字段上,但混合(将一些注释放在字段上,将一些放在相关的getter/setter上(将不起作用。

相关内容

  • 没有找到相关文章

最新更新