ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
@ResponseBody とは
通常の Spring MVC では、@Controller のメソッドは戻り値を「View 名」と解釈し、ViewResolver が JSP / Thymeleaf 等のテンプレートを探します。
@ResponseBody を付けると、この View 解決をスキップし、戻り値をそのままレスポンスボディに書き出します。HttpMessageConverter(Jackson 等)が JSON / XML に変換します。
基本的な使い方
メソッドレベル
@Controller
public class UserController {
@GetMapping("/users/{id}")
@ResponseBody // ← この戻り値だけ JSON で返す
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
@GetMapping("/users/list")
public String listView() {
return "users/list"; // ← こちらは View 名 (users/list.jsp 等)
}
}
クラスレベル(@RestController)
すべてのメソッドが API レスポンスを返すなら @RestController が便利:
@RestController // = @Controller + @ResponseBody
@RequestMapping("/api/users")
public class UserApiController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) { // @ResponseBody 不要
return userService.findById(id);
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.create(user);
}
}
レスポンス形式(JSON / XML / その他)
戻り値の変換は HttpMessageConverter が担当します。クライアントが Accept ヘッダで何を要求しているかで形式が決まる:
| Accept ヘッダ | 変換 | 必要な依存 |
|---|---|---|
application/json | Jackson / Gson で JSON | Spring Boot に標準同梱(Jackson) |
application/xml | JAXB / Jackson XML で XML | jackson-dataformat-xml 追加 |
text/plain | String そのまま | 標準 |
text/html | String そのまま(HTML として解釈) | 標準 |
レスポンスステータスとヘッダの制御
① @ResponseStatus
@PostMapping("/users")
@ResponseStatus(HttpStatus.CREATED) // 201
public User create(@RequestBody User user) {
return userService.create(user);
}
② ResponseEntity(細かい制御)
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
Optional<User> user = userService.findByIdOptional(id);
return user
.map(u -> ResponseEntity.ok()
.header("X-Custom-Header", "value")
.body(u))
.orElseGet(() -> ResponseEntity.notFound().build());
}
// 簡潔形
return ResponseEntity.status(HttpStatus.CREATED).body(user);
return ResponseEntity.noContent().build(); // 204
return ResponseEntity.badRequest().body(errorDto); // 400
JSON 出力のカスタマイズ
① Jackson アノテーションで制御
public class User {
private Long id;
@JsonProperty("user_name") // JSON のキー名変更
private String name;
@JsonIgnore // JSON 出力から除外
private String password;
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate birthDate;
@JsonInclude(JsonInclude.Include.NON_NULL) // null は出力しない
private String email;
}
② application.properties での共通設定
# キーをスネークケースに
spring.jackson.property-naming-strategy=SNAKE_CASE
# null は出力しない
spring.jackson.default-property-inclusion=non_null
# 日付フォーマット
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=Asia/Tokyo
@ResponseBody vs @RestController vs @Controller
| 用途 | 使うもの |
|---|---|
| API のみのクラス | @RestController |
| HTML View のみのクラス | @Controller |
| HTML View + 一部 API(混在) | @Controller + 一部メソッドに @ResponseBody |
よくあるトラブル
Q. JSON でなく文字列がそのまま返る
- 戻り値が String 型: そのまま
text/plainで返る → DTO に変えるか、明示的に JSON 形式で返す - Jackson が classpath にない:
spring-boot-starter-webを依存に追加
Q. レスポンスが空 ({})
- getter がない: Jackson は getter を見るので必須
- Lombok の
@Dataや@Getterで getter 生成
Q. 文字化け(日本語が ???)
# application.properties
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
関連記事
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- APIキー取得方法 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Scratch 作品の公開方法 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?