SpringMVCの基本構造と実装手法

1. 概要

Javaで実装された軽量Webフレームワークで、MVCモデルを採用した表現層技術です。Servletをラップし、リクエスト処理とレスポンス生成を効率化します。

従来のServletベースでは1クラス1リクエストの制約がありましたが、MVCアーキテクチャでは以下のように分離されます:

  • コントローラ: リクエスト受信とビジネスロジックの委譲
  • サービス層: ビジネス処理の実行
  • DAO層: データアクセス処理

現代のWebアプリケーションでは、非同期通信が主流となり、JSON形式でのデータ交換が一般的です。

2. ライブラリ依存関係

2.1 Spring MVCの基本設定

<!-- Servlet API -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

<!-- Spring Web MVC -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.22</version>
</dependency>

2.2 Spring Bootでの設定

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

3. 設定の詳細

3.1 エンコーディング設定

GETリクエストのUTF-8対応を追加:

<configuration>
    <uriEncoding>UTF-8</uriEncoding>
</configuration>

3.2 リクエスト処理の設定

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/api/*"};
    }

    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}

4. 主要アノテーション

@EnableWebMvc

JSON変換を有効化するための設定アノテーション:

@Configuration
@ComponentScan("com.example.controller")
@EnableWebMvc
public class WebConfig { }

@RequestBody

JSONデータをオブジェクトにマッピング:

@PostMapping("/data")
@ResponseBody
public Response handleData(@RequestBody InputData input) {
    // データ処理
}

5. リクエストパラメータ処理

5.1 基本パラメータ

@GetMapping("/params")
@ResponseBody
public String processParams(@RequestParam("value") String param) {
    return "Received: " + param;
}

5.2 オブジェクトマッピング

@PostMapping("/user")
@ResponseBody
public String createUser(@RequestBody UserDTO user) {
    // ユーザー登録処理
}

5.3 日付フォーマット

@GetMapping("/date")
@ResponseBody
public String processDate(@DateTimeFormat(pattern = "yyyy/MM/dd") Date date) {
    return "Date: " + date;
}

6. レスポンス処理

6.1 JSONレスポンス

@GetMapping("/response")
@ResponseBody
public Map<String, Object> jsonResponse() {
    Map<String, Object> response = new HashMap<>();
    response.put("status", "success");
    response.put("data", "example");
    return response;
}

6.2 ページ遷移

@GetMapping("/view")
public String showView() {
    return "dashboard";
}

タグ: spring-mvc jackson-databind RESTful-API spring-boot annotation-driven

9月24日 20:25 投稿