Spring MVCにおけるリダイレクト・フォワードの実装とAJAX連携手法

リダイレクトとフォワードの実装方法

Spring MVCでクライアントのリクエストを別のエンドポイントに誘導する際、リダイレクトとフォワードの2つの手法が利用可能です。以下に具体的な実装パターンを示します。

リダイレクトの実装

コントローラーメソッドの戻り値にredirect:プレフィックスを付加する方法がシンプルです。アプリケーションルートからの絶対パスを指定します。

@GetMapping("/login")
public String handleLogin() {
    return "redirect:/dashboard";
}

より細かい制御が必要な場合はResponseEntityを使用します。HTTPステータスコードを明示的に指定可能です。

@GetMapping("/legacy")
public ResponseEntity<Void> migrateSystem() {
    return ResponseEntity
        .status(HttpStatus.SEE_OTHER)
        .location(URI.create("/new-system"))
        .build();
}

フォワードの実装

サーバー内部で処理を別のエンドポイントに委譲する場合はforward:プレフィックスを使用します。クライアントは元のURLを維持したまま処理が行われます。

@PostMapping("/submit")
public String processForm() {
    return "forward:/confirmation";
}

AJAXリクエストの処理フロー

フロントエンドとの非同期通信を実現するための主要な実装パターンを説明します。

コントローラーの実装

@RestControllerアノテーションを使用すると、メソッドの戻り値が自動的にJSONに変換されます。以下は商品情報取得APIの実装例です。

@RestController
@RequestMapping("/api/products")
public class ProductApiController {

    @GetMapping("/{code}")
    public ProductDetail fetchProduct(@PathVariable String code) {
        return productService.findDetailByCode(code);
    }
}

フロントエンドの実装

fetch APIを用いたリクエスト例です。非同期処理でサーバー応答を処理します。

async function loadProduct(code) {
  try {
    const response = await fetch(`/api/products/${code}`);
    return await response.json();
  } catch (error) {
    console.error('API通信エラー:', error);
    throw error;
  }
}

文字コード問題の解消アプローチ

日本語を含むマルチバイト文字の処理で発生するエンコーディング問題に対する対策です。

POSTリクエストの対策

Springが提供するCharacterEncodingFilterをweb.xmlに登録します。UTF-8エンコーディングを強制適用します。

<filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>
    org.springframework.web.filter.CharacterEncodingFilter
  </filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

GETリクエストの特殊対応

サーバー側のURI処理エンコーディングを明示的に設定する必要があります。Tomcatのserver.xmlでURIEncoding="UTF-8"を指定します。

<Connector 
  port="8080" 
  protocol="HTTP/1.1"
  URIEncoding="UTF-8" />

これにより、クエリパラメータの日本語が正しくデコードされます。

タグ: Spring MVC REST API AJAX Character Encoding Servlet Filter

6月1日 17:15 投稿