Перечисления и пользовательские скалярные типы
Расширьте схему GraphQL за пределы встроенных типов: определяйте перечисления для фиксированных наборов значений и пользовательские скаляры для таких предметных типов, как даты и URL, в Spring Boot.
«Перечисления и пользовательские скалярные типы» — бесплатный урок GraphQL APIs with Spring Boot на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения GraphQL APIs with Spring Boot, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс GraphQL APIs with Spring Boot содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Beyond Built-in Types
GraphQL ships with scalars like Int, String, and Boolean. But real domains need more: a fixed set of statuses, a proper date type, or a validated email.
Enums and custom scalars let your schema express these precisely.
What Is a GraphQL Enum?
An enum restricts a field to a fixed list of named values. Clients can only send or receive one of those values, and tooling can offer autocompletion.
enum OrderStatus {
PENDING
SHIPPED
DELIVERED
CANCELLED
}Using an Enum in a Type
Reference the enum like any other type. The field is now guaranteed to hold a valid status.
type Order {
id: ID!
status: OrderStatus!
}Mapping Enums to Java
Spring for GraphQL maps a schema enum to a Java enum automatically when the names match exactly.
public enum OrderStatus {
PENDING, SHIPPED, DELIVERED, CANCELLED
}Why Custom Scalars?
The built-in scalars are limited. Representing a date as a String loses meaning and validation. A custom scalar defines how a domain value is serialized, deserialized, and validated.
Declaring a Scalar in the Schema
First declare the scalar name in your SDL, then use it on fields.
scalar DateTime
type Event {
id: ID!
startsAt: DateTime!
}Using a Pre-built Scalar Library
The graphql-java-extended-scalars library provides ready-made scalars for DateTime, Date, URL, and more, so you do not write them by hand.
// build.gradle
implementation 'com.graphql-java:graphql-java-extended-scalars:21.0'Registering a Scalar in Spring
Wire the scalar into the runtime with a RuntimeWiringConfigurer bean so the schema knows how to handle it.
@Bean
public RuntimeWiringConfigurer scalars() {
return wiring -> wiring.scalar(ExtendedScalars.DateTime);
}Writing Your Own Scalar
For a domain type you can define a GraphQLScalarType with a custom Coercing implementation controlling parse and serialize logic.
GraphQLScalarType.newScalar()
.name("Email")
.coercing(new EmailCoercing())
.build();Validation Inside Coercing
A scalar's Coercing can reject invalid input by throwing a CoercingParseValueException, giving you type-level validation for free.
if (!value.toString().contains("@")) {
throw new CoercingParseValueException("Invalid email");
}Best Practices
Use these types wisely:
- Prefer enums over free-form strings for fixed sets
- Reuse library scalars before writing your own
- Keep
Coercinglogic pure and predictable - Document each custom scalar's expected format
Quick Check
Test your knowledge of enums and scalars.
Recap
You extended your schema's type system:
- Enums restrict fields to a fixed value set
- They map automatically to Java enums by name
- Custom scalars model domain types like dates and emails
- Use library scalars or write a
Coercingfor your own - Register scalars via
RuntimeWiringConfigurer
Richer types make your API safer and more expressive.
Часто задаваемые вопросы
Урок «Перечисления и пользовательские скалярные типы» бесплатный?
Да — полный текст урока «Перечисления и пользовательские скалярные типы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс GraphQL APIs with Spring Boot, подпишись на CoddyKit PRO. Курс GraphQL APIs with Spring Boot содержит 4 уроков всего.
Чему я научусь в уроке «Перечисления и пользовательские скалярные типы»?
Расширьте схему GraphQL за пределы встроенных типов: определяйте перечисления для фиксированных наборов значений и пользовательские скаляры для таких предметных типов, как даты и URL, в Spring Boot. Ты практикуешь GraphQL APIs with Spring Boot с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать GraphQL APIs with Spring Boot?
Предыдущий опыт не требуется. GraphQL APIs with Spring Boot на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Перечисления и пользовательские скалярные типы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке GraphQL APIs with Spring Boot?
Да. Каждый урок GraphQL APIs with Spring Boot включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Моделирование вложенных объектов и связей
- Реализация интерфейсов и объединённых типов
- Использование входных типов для мутаций
- Перечисления и пользовательские скалярные типы