目次
1. 単純なデータ型
サーブレットでは、request.getParameter(name) を通じてリクエスト パラメータを取得します。この方法には 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);
}
実際、これは上記のオブジェクト タイプと何ら変わりません。主な理由は、パラメータ タイプの属性が異なり、アクセス パスが異なるためです。
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);
}
アクセスパス:
3.3.2 テスト結果
なぜ最初の 2 つの情報が空になっているかというと、']' を見逃していたためで、小さなエピソードがありましたが、継続的な出力には影響しません。
過去のコラムや記事の関連記事
今回の内容が分からない方は、過去号もご覧ください。以下は、Maven や Mybatis など過去にブロガーが丁寧に書いたコラム記事です。あなたは通り過ぎます!役に立った場合は、「いいね」やブックマークをお願いします。このうち、Springコラムは一部更新中のため閲覧できませんが、ブロガーが全ての更新を完了すると閲覧できるようになります。
1. Maven シリーズの列
Maven シリーズのコラム | Maven プロジェクト開発 |
Maven 集約開発 [例の詳細な説明 --- 5555 ワード] |