GraphQL SPQR: идентификатор не должен отображаться при создании - PullRequest
0 голосов
/ 30 ноября 2018

Я использую 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 при создании?

1 Ответ

0 голосов
/ 02 января 2019

В GraphQL-SPQR версии 0.9.9 и более ранних версий закрытые члены вообще не сканируются, поэтому аннотации в закрытых полях обычно ничего не делают.Кстати, Джексон (или Gson, если так настроен) используется для обнаружения десериализуемых полей в типах ввода, и эти библиотеки do рассматривают частные поля, поэтому некоторые аннотации будут выглядеть какработает для типов ввода.Это то, что происходит в вашем случае.Но @GraphQLIgnore - это , а не среди аннотаций, которые будут работать с приватным полем.

Вам нужно переместить аннотации в методы получения и установки.

@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) можно будет размещать аннотации в приватном виде.поля, но смешивание (размещение некоторых аннотаций в поле, а некоторых - в связанных методах получения / установки) не будет работать.

...