Постобработка поля с помощью Spring Boot + GraphQL - PullRequest
0 голосов
/ 03 июля 2019

Мне нужен способ сделать постобработку поля объекта (в частности, DTO ) на основе HttpServletRequest установки атрибута в Spring Boot + GraphQL приложение. Вот что у меня есть :

public class Person {

  private String name;

  public static Person of(String name) {
      Person person = new Person();
      person.name = name;
      return person;
  }

  public String name(DataFetchingEnvironment environment) {
      GraphQLContext context = environment.getContext();
      HttpServletRequest request = context.getRequest().get();
      boolean featureEnabled = (Boolean) request.getAttribute("Feature-enabled");
      return featureEnabled ? name + " processed opt 1" : name + " processed opt 2";
    }
}

Который затем возвращается клиенту распознавателем:

@Component
public class PersonResolver implements GraphQLQueryResolver {

  public List<Person> getPersons(DataFetchingEnvironment environment) {
      System.out.println("Executing getPersons()...");
      return Arrays.asList(
              Person.of("Mike"),
              Person.of("David"),
              Person.of("James")
      );
  }
}

, который делает именно то, что я хочу (возвращает конкретную версию поля на основе атрибута запроса), но создает небольшие неудобства, когда я хочу масштабировать это решение для других полей.

То, что я ищу , - это способ масштабирования этой функции (описанный выше в Person type name() method) для других полей, скорее всего, различных типов.

  • Я пробовал вариант с настраиваемым сериализатором Jackson , но похоже, что GraphQL будет полностью игнорировать пользовательские сериализаторы при построении вывода.

  • Я пытался реализовать собственный обработчик времени компиляции (используя Lombock ), но это приводит к дополнительной сложности при создании вашего проекта (я привязан к ограниченный набор JDK версий).

Итак, вопрос: Есть ли лучший вариант постобработки на местах / лучший способ решения такой проблемы, чтобы создать масштабируемое решение?

...