gpt4 book ai didi

图形QL SPQR : id shall not be shown at creation

转载 作者:行者123 更新时间:2023-12-05 06:29:24 25 4
gpt4 key购买 nike

我使用 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 及更早版本中,私有(private)成员根本不会被扫描,因此私有(private)字段上的注释通常不会执行任何操作。顺便说一句,Jackson(或 Gson,如果这样配置)用于发现输入类型上的可反序列化字段,而那些库确实查看私有(private)字段,因此会出现一些注释为输入类型工作。这就是您的情况。但是,@GraphQLIgnore 将在私有(private)字段上工作的注释。

您需要做的是将注解移至 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 的 future 版本(0.9.9 后)中,也可以将注释放在私有(private)字段上,但是混合(将一些注释放在一个字段上,一些放在相关的 getter/setter 上)将不起作用。

关于图形QL SPQR : id shall not be shown at creation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53560095/

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