Spring MVCの各種パラメータをカプセル化する

目次

1. 単純なデータ型

1.1 コントローラの方法

1.2 試験結果

2. オブジェクトの種類

2.1 単一オブジェクト

2.1.1 コントローラーのメソッド

2.1.2 試験結果

2.2 関連オブジェクト

2.2.1 コントローラーのメソッド

2.2.2 試験結果

3. コレクションの種類

3.1 単純なデータ型のコレクション

3.1.1 制御方法

3.1.2 試験結果

3.2 オブジェクトのデータ型のコレクション

3.2.1 コントローラーのメソッド

3.2.2 テスト結果

3.3 マップ収集

3.3.1 コントローラーのメソッド

3.3.2 テスト結果 

過去のコラムや記事の関連記事 

1. Maven シリーズの列

2. Mybatisシリーズのコラム

3. スプリングシリーズのコラム 

4. Spring MVC シリーズのカラム  


1. 単純なデータ型

サーブレットでは、request.getParameter(name) を通じてリクエスト パラメータを取得します。この方法には 2 つの問題があります。

  1. リクエストパラメータが多い場合、コードの冗長性が発生します。
  2. コンテナとしっかりと結合されている

SpringMVC は、リクエスト データを取得するためのパラメータ インジェクションをサポートしています。つまり、リクエスト パラメータはメソッド パラメータに直接カプセル化されます。使用方法は次のとおりです。

1.1 コントローラの方法

// 获取简单类型参数
    @RequestMapping("/c1/param1")
    public void simpleParam(String username,int age){
        System.out.println(username+" "+age);
    }

        対応する param1 ページを設定していないため、これは、アクセスされたパラメータをコンソールに直接出力するためのものです。このメソッドにアクセスする場合、リクエスト パラメータ名はメソッド パラメータ名と同じになり、自動カプセル化が完了します。そしてそれをコンソールに印刷します。実行パスは次のとおりです: http://localhost:8080/c1/param1?username=LYL&age=19

1.2 試験結果

OK、確かにコンソールに正常に出力され、カプセル化が成功したことが示されています。次に、オブジェクト タイプについて説明します。 

2. オブジェクトの種類

SpringMVC はパラメータをオブジェクトとして直接カプセル化することをサポートしています。まず、新しい Student クラスを作成します。次のように:

学生 

package com.example.domain;


public class Student {
    private int id;
    private String name;
    private String sex;

    public Student() {
    }

    public Student(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student[ " +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                " ]";
    }
}

2.1 単一オブジェクト

2.1.1 コントローラーのメソッド

// 获取对象类型参数
    @RequestMapping("/c1/param2")
    public void objParam(Student student){
        System.out.println(student);
    }

 生徒の特定の情報がコンソールに出力されることがわかります。

アクセスパス: http://localhost:8080/c1/param2?id=1&name=LYL&sex=man

2.1.2 試験結果

        OK、これは確かにコンソールに表示され、オブジェクトタイプをカプセル化するときに、その属性をアクセスパスのパラメータに入れるだけでよいことが示されています。 

2.2 関連オブジェクト

        関連するオブジェクトのカプセル化を実現するには、まず Address アドレス クラスを作成し、次に Student クラスに Address タイプ属性を追加する必要があります。次のように:

住所: 

package com.example.domain;

public class Address {

    // 地址信息
    private String info;
    // 邮编
    private String postcode;

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public String getPostcode() {
        return postcode;
    }

    public void setPostcode(String postcode) {
        this.postcode = postcode;
    }

    @Override
    public String toString() {
        return "Address[ " +
                "info='" + info + '\'' +
                ", postcode='" + postcode + '\'' +
                " ]";
    }
}

 Student クラスを次のように変更することを忘れないでください。

package com.example.domain;

import java.util.List;
import java.util.Map;

public class Student {
    private int id;
    private String name;
    private String sex;
    // 地址对象
    //private Address address;

    public Student() {
    }

    public Student(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student[ " +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                " ]";
    }
}

2.2.1 コントローラーのメソッド

    // 获取关联对象类型参数
    @RequestMapping("c1/param3")
    public void objParam2(Student student){
        System.out.println(student);
    }

        このメソッドにアクセスする場合、リクエストパラメータ名とメソッドパラメータの属性名が同じであれば、自動カプセル化が完了します。したがって、リクエスト パスは次のように書くことができます: http://localhost:8080/c1/param3?id=1&name=HQX&sex=women&address.info=guangzhou&address.postcode=5201314

2.2.2 試験結果

OK、クエリが正常に実行されたことがはっきりとわかります。 

3. コレクションの種類

        SpringMVC は、List または Map コレクションとしてのパラメーターのカプセル化をサポートしています。以下は、単純なデータ型のコレクションをカプセル化する方法を示しています。次のように:

3.1 単純なデータ型のコレクション

3.1.1 制御方法

// 绑定简单数据类型List参数,参数前必须添加@RequestParam注解
    @RequestMapping("/c/param4")
    public void listParam(@RequestParam List<String> users){
        users.forEach(System.out::println);
    }

コードから、アクセス後にこのコレクションがコンソール内で走査されることがわかります。

アクセスパスは以下のとおりです。  http://localhost:8080/c/param4?users=LYL&users=HQX

3.1.2 試験結果

 OK、確かにコンソールに正常に出力されました。

3.2 オブジェクトのデータ型のコレクション

        SpringMVC は、オブジェクト型の List コレクションへのパラメーターのカプセル化をサポートしていませんが、List プロパティを使用してオブジェクトにカプセル化することはできます。ここでは、まず Student クラスにコレクション オブジェクトを追加する必要があります。次のように書かれています。

学生

package com.example.domain;

import java.util.List;
import java.util.Map;

public class Student {
    private int id;
    private String name;
    private String sex;

    // 地址集合List
    private List<Address> address;

    public Student() {
    }

    public Student(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public List<Address> getAddress() {
        return address;
    }

    public void setAddress(List<Address> address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student[ " +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                " ]";
    }
}

3.2.1 コントローラーのメソッド

// 对象中包含集合属性
    @RequestMapping("c1/param6")
    public void listParam6(Student student){
        System.out.println(student);
    }

実際、これは上記のオブジェクト タイプと何ら変わりません。主な理由は、パラメータ タイプの属性が異なり、アクセス パスが異なるためです。 

访问路径:http://localhost:8080/c1/param6?id=1&name=LYL&sex=man&address[0].info=HQX&address[0].postcode=520&address[1].info=MVC&address[1].postcode=1314

3.2.2 テスト結果

 OK、クエリも正常に実行できます

3.3 マップ収集

        同様に、SpringMVC が Map コレクションをカプセル化したい場合は、Map 属性を持つオブジェクトにカプセル化する必要があります。Student エンティティ クラスを次のように変更します。

学生

package com.example.domain;

import java.util.List;
import java.util.Map;

public class Student {
    private int id;
    private String name;
    private String sex;

    // 地址集合Map
    private Map<String,Address> address;

    public Student() {
    }

    public Student(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Map<String, Address> getAddress() {
        return address;
    }

    public void setAddress(Map<String, Address> address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student[ " +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                " ]";
    }
}

3.3.1 コントローラーのメソッド

// 对象中包含Map属性
    @RequestMapping("c1/param7")
    public void mapParam(Student student){
        System.out.println(student);
    }

アクセスパス:

http://localhost:8080/c1/param7?id=1&name=LYL&sex=man&address[%27one%27].info=H&address[%27one%27].postcode=520&address[%27two%27].info=QX&address[ %27two%27].postcode=1314]

3.3.2 テスト結果 

        なぜ最初の 2 つの情報が空になっているかというと、']' を見逃していたためで、小さなエピソードがありましたが、継続的な出力には影響しません。

過去のコラムや記事の関連記事 

     今回の内容が分からない方は、過去号もご覧ください。以下は、Maven や Mybatis など過去にブロガーが丁寧に書いたコラム記事です。あなたは通り過ぎます!役に立った場合は、「いいね」やブックマークをお願いします。このうち、Springコラムは一部更新中のため閲覧できませんが、ブロガーが全ての更新を完了すると閲覧できるようになります。

1. Maven シリーズの列

Maven シリーズのコラム Maven プロジェクト開発
Maven 集約開発 [例の詳細な説明 --- 5555 ワード]

2. Mybatisシリーズのコラム

Mybatisシリーズコラム MyBatis エントリー構成
Mybatisエントリーケース【超詳細】
MyBatis設定ファイル - 関連タグの詳細説明
Mybatis ファジー クエリ - パラメーターと集計クエリ、主キー バックフィルを定義する 3 つの方法
Mybatis 動的 SQL クエリ -- (実際の戦闘ケースを添付 -- 8888 ワード -- 88 品質ポイント)
Mybatis ページング クエリ - パラメーターを渡す 4 つの方法
Mybatis 1 次キャッシュおよび 2 次キャッシュ (テストメソッド付き)
Mybatis 分解クエリ
Mybatis関連のクエリ[実戦事例添付]
MyBatisアノテーション開発 --- 追加・削除・変更・動的SQLを実現
MyBatis アノテーション開発 --- カスタム マッピング関係と関連するクエリを実現します

3. スプリングシリーズのコラム 

春の連載コラム Spring IOC の概要 [カスタム コンテナ インスタンス]
IOCがSpringを利用して実装する例を交えて詳しく解説
Spring IOCオブジェクトの作成方法、戦略、破棄タイミング、ライフサイクル、取得方法
Spring DIの紹介と依存性注入の方法と依存性注入の種類
Spring IOC 関連のアノテーションの適用—パート 1
Spring IOC 関連のアノテーションの適用—パート 2
Spring AOP と関連事例の紹介
アノテーション、ネイティブ Spring、SchemaBased の 3 つの方法で AOP を実装する [詳細なケース付き]
春季情勢と関連事例の紹介
Springトランザクション管理スキームとトランザクションマネージャーおよびトランザクション制御API
Spring トランザクション関連の設定、伝播動作、分離レベル、およびアノテーション設定の宣言型トランザクション

4. Spring MVC シリーズのカラム  

SpringMVCシリーズコラム 入門ケースを含む Spring MVC の概要
Spring MVCの各種パラメータ取得・取得方法 カスタム型コンバーター・エンコードフィルター
Spring MVC はパラメータとカスタムパラメータタイプコンバータとエンコードフィルタを取得します
Spring MVC 処理応答と詳細なケース説明
Spring MVC 関連のアノテーションの適用——パート 1

Spring MVC 関連のアノテーションの適用 - パート 2

Spring MVC 関連のアノテーションの適用 —— パート 2
Spring MVC のさまざまな状況でのファイルのアップロード
Spring MVCの非同期アップロード、クロスサーバーアップロード、ファイルダウンロード
Spring MVC例外処理 [シングルコントロール例外ハンドラ、グローバル例外ハンドラ、カスタム例外ハンドラ]
Spring MVC インターセプターとクロスドメインリクエスト
SSM導入事例 【最も詳しいプロセスを解説するC局の事例】

おすすめ

転載: blog.csdn.net/qq_53317005/article/details/130372221