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