ミューテーション入力引数のバリデーション
Bean Validationを使ってSpring Boot GraphQL APIに渡されるミューテーション引数を検証し、適切に整形式のデータだけをデータ層へ届ける方法を学びます。
「ミューテーション入力引数のバリデーション」はCoddyKit上の無料GraphQL APIs with Spring Bootレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGraphQL APIs with Spring Boot学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 GraphQL APIs with Spring Bootコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Why Validate Mutation Input?
Mutations change your data, so the arguments they receive must be trustworthy. Without validation, clients could send empty names, negative prices, or malformed emails straight into your database.
Input validation rejects bad data early and returns a clear error before any persistence happens.
Validation in the GraphQL Lifecycle
GraphQL already validates the shape of your input against the schema (types, required fields). But it does not check business rules like 'price must be positive'.
That semantic layer is your responsibility, and Spring's Bean Validation fits perfectly here.
Bean Validation Annotations
Spring Boot ships with Jakarta Bean Validation. Common annotations:
@NotNull,@NotBlankfor required values@Sizefor length bounds@Min,@Max,@Positivefor numbers@Emailfor email format
Annotating an Input Class
Map your GraphQL input type to a Java record or class and add constraints to its fields.
public record CreateBookInput(
@NotBlank String title,
@Size(min = 2, max = 60) String author,
@Positive double price
) {}Triggering Validation in a Resolver
Add @Valid to the argument in your mutation method. Spring then checks every constraint before the method body runs.
@MutationMapping
public Book createBook(@Argument @Valid CreateBookInput input) {
return bookService.create(input);
}What Happens on Failure
If a constraint fails, Spring throws a ConstraintViolationException before your service code runs. The mutation does not persist anything, protecting your data layer from invalid state.
Custom Error Messages
Each annotation accepts a message attribute so clients see helpful feedback instead of a generic failure.
@NotBlank(message = "Title is required")
String title;Mapping Violations to GraphQL Errors
Use a DataFetcherExceptionResolver to turn validation exceptions into clean GraphQL errors with field-level detail, so clients know exactly which input was wrong.
@Override
public GraphQLError resolveToSingleError(Throwable ex, DataFetchingEnvironment env) {
return GraphqlErrorBuilder.newError(env)
.errorType(ErrorType.BAD_REQUEST)
.message(ex.getMessage())
.build();
}Custom Validators
For rules the built-in annotations cannot express (like 'ISBN must be unique'), write a custom constraint implementing ConstraintValidator and annotate fields with it.
public class IsbnValidator implements ConstraintValidator<ValidIsbn, String> {
public boolean isValid(String value, ConstraintValidatorContext ctx) {
return value != null && value.matches("\\d{13}");
}
}Validating Nested Inputs
When an input contains another object, mark the nested field with @Valid too. Validation then cascades into the child object.
public record OrderInput(
@NotNull @Valid AddressInput shippingAddress,
@Positive int quantity
) {}Best Practices
Keep validation reliable:
- Validate at the boundary, before any business logic
- Return field-specific messages clients can act on
- Reuse input classes across related mutations
- Keep custom validators stateless and fast
Quick Check
Test your understanding of mutation validation.
Recap
You learned to validate mutation input:
- GraphQL checks shape; you enforce business rules
- Annotate input classes with Bean Validation constraints
- Use
@Validin resolvers to trigger checks - Map violations to clean GraphQL errors
- Write custom validators and cascade with nested
@Valid
Validated mutations keep your data layer safe and clean.
AI チューターと学ぶ GraphQL APIs with Spring Boot — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 12
- レッスン
- 48
よくある質問
「ミューテーション入力引数のバリデーション」レッスンは無料ですか?
はい。「ミューテーション入力引数のバリデーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、GraphQL APIs with Spring Bootコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 GraphQL APIs with Spring Bootコースには全4レッスンが含まれています。
「ミューテーション入力引数のバリデーション」で何を学びますか?
Bean Validationを使ってSpring Boot GraphQL APIに渡されるミューテーション引数を検証し、適切に整形式のデータだけをデータ層へ届ける方法を学びます。 ブラウザで直接実行するハンズオンコードでGraphQL APIs with Spring Bootを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
GraphQL APIs with Spring Bootを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGraphQL APIs with Spring Bootは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「ミューテーション入力引数のバリデーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGraphQL APIs with Spring Bootレッスンでコードを書いて実行できますか?
はい。すべてのGraphQL APIs with Spring Bootレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- GraphQL Mutationsを理解する
- Mutationによるデータ作成
- データの更新と削除
- ミューテーション入力引数のバリデーション