ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
基本的な使い方
@RestController
@RequestMapping("/api/users")
public class UserController {
@PostMapping
public User create(@RequestBody UserCreateRequest req) {
return userService.create(req);
}
}
// リクエスト例
// POST /api/users
// Content-Type: application/json
// {
// "name": "Alice",
// "email": "alice@example.com"
// }
// UserCreateRequest
public class UserCreateRequest {
private String name;
private String email;
// getters/setters
}
バリデーション (@Valid)
@PostMapping
public User create(@RequestBody @Valid UserCreateRequest req) {
return userService.create(req);
}
// DTO に Bean Validation アノテーション
public class UserCreateRequest {
@NotBlank(message = "名前は必須です")
@Size(max = 100, message = "名前は 100 文字以内")
private String name;
@NotBlank
@Email(message = "有効なメールアドレスを入力してください")
private String email;
@Min(value = 18, message = "18 歳以上である必要があります")
private int age;
@Pattern(regexp = "^[0-9]{10,11}$", message = "電話番号は数字 10-11 桁")
private String phone;
}
// バリデーション失敗時の例外ハンドラ
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public Map handleValidation(MethodArgumentNotValidException ex) {
Map errors = new HashMap<>();
ex.getBindingResult().getFieldErrors().forEach(err ->
errors.put(err.getField(), err.getDefaultMessage())
);
return errors;
}
主要な Bean Validation アノテーション
| アノテーション | 用途 |
|---|---|
@NotNull | null 不可 |
@NotBlank | 文字列:null / 空 / 空白のみ 不可 |
@NotEmpty | コレクション / 文字列:null / 空 不可 |
@Size(min, max) | 長さ範囲 |
@Min / @Max | 数値の最小・最大 |
@Email | メール形式 |
@Pattern | 正規表現 |
@Past / @Future | 日付の過去・未来 |
@Positive / @Negative | 正の数 / 負の数 |
@Digits(integer, fraction) | 整数部・小数部の桁数 |
@AssertTrue / @AssertFalse | boolean フィールドの値 |
@Valid | ネストされたオブジェクトを再帰的にバリデート |
JSON 受信のカスタマイズ
① プロパティ名のマッピング
public class UserCreateRequest {
@JsonProperty("user_name") // JSON 側は user_name
private String name; // Java 側は name
}
// または application.properties で一括
spring.jackson.property-naming-strategy=SNAKE_CASE
② 不要なフィールドの無視
@JsonIgnoreProperties(ignoreUnknown = true)
public class UserCreateRequest {
private String name;
private String email;
// JSON に余分なフィールドがあっても無視
}
// または application.properties
spring.jackson.deserialization.fail-on-unknown-properties=false
③ 日付フォーマット
public class EventRequest {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Tokyo")
private LocalDateTime scheduledAt;
}
④ enum の柔軟受信
public enum UserStatus {
ACTIVE, INACTIVE, SUSPENDED;
@JsonCreator
public static UserStatus fromString(String s) {
return UserStatus.valueOf(s.toUpperCase()); // "active" → ACTIVE
}
}
# または application.properties
spring.jackson.deserialization.accept-case-insensitive-enums=true
ネストしたオブジェクト
public class OrderRequest {
@NotBlank
private String customer;
@Valid // ← ネストしたリストも再帰バリデーション
@NotEmpty
private List items;
}
public class OrderItemRequest {
@NotNull
private Long productId;
@Min(1)
private int quantity;
}
// JSON
// {
// "customer": "Alice",
// "items": [
// {"productId": 1, "quantity": 2},
// {"productId": 3, "quantity": 1}
// ]
// }
@RequestBody と @RequestParam の使い分け
| シナリオ | アノテーション |
|---|---|
| JSON / XML のボディ | @RequestBody |
| フォームデータ(application/x-www-form-urlencoded) | @RequestParam または @ModelAttribute |
| multipart/form-data(ファイルアップロード) | @RequestParam("file") MultipartFile file |
| クエリパラメータ | @RequestParam |
よくあるトラブル
Q. リクエストが 400 Bad Request になる
- Content-Type が application/json でない: クライアント側のヘッダ確認
- JSON 構文エラー: カンマ・引用符の確認
- DTO のフィールド型不一致: 数値を文字列で送る等
- setter がない: Jackson は setter 経由でセット(または public フィールド)
Q. すべてのフィールドが null になる
- JSON のキー名と Java のフィールド名(または setter 名)が一致していない
- Lombok の
@Dataや@Setter忘れ - jackson-databind が依存に含まれていない
関連記事
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?