SpringMVC(2)結合パラメータを要求します

リクエストパラメータのバインド

バインディングメカニズム

  • フォームの送信データは、ユーザ名=&母パスワード= 123として、K = Vフォーマットであります
  • SpringMVCパラメータは、パラメータ・バンドリングとしてフォームを送信するためのプロセスパラメータ要求、コントローラ内のメソッドを結合します
  • 要件:フォーム名とパラメータ名が同じで提出

サポートされるデータ型

基本データ型、および文字列

要件:フォーム名とパラメータ名が同じで提出

例えば:

param.jsp

<a href="param/testParam?username=hehe&password=123">RequestMapping注解</a>

ParamController

@Controller
@RequestMapping("/param")
public class ParamController {
    // 基本数据类型
    @RequestMapping("/testParam")
    public String testParam(String username,String password){
        System.out.println("基本数据类型");
        System.out.println("用户名:"+username);
        System.out.println("密码:"+password);
        return "success";
    }
}

エンティティタイプ(JavaBeanの)

名前は、Beanのプロパティ名と同じでなければなりません。

エンティティクラスの構築

public class Account implements Serializable {

    private String username;
    private String password;
    private Double money;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Account{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", money=" + money +
                '}';
    }
}

コントローラ

//请求参数绑定把数据封装到JavaBean的类中
@RequestMapping("/saveAccount")
public String saveAccount(Account account){
    System.out.println("执行了...");
    System.out.println(account);
    return "success";
}

出力

web.xmlの中国の文字化けが問題を解決するため、コンフィギュレーション

<!--配置解决中文乱码的过滤器-->
<filter>
  <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

ユーザーアカウントをお持ちの場合は、我々はUserクラスを設定する必要があります前に、入力し

public class User implements Serializable {

    private String uname;
    private Integer age;

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "uname='" + uname + '\'' +
                ", age=" + age +
                '}';
    }
}

Accountクラス

public class Account implements Serializable {

    private String username;
    private String password;
    private Double money;

    private User user;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public String toString() {
        return "Account{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", money=" + money +
                ", user=" + user +
                '}';
    }
}

params.jspファイル

<form action="param/saveAccount" method="post">
    姓名:<input type="text" name="username" /><br/>
    密码:<input type="text" name="password" /><br/>
    金额:<input type="text" name="money" /><br/>
    用户姓名:<input type="text" name="user.uname" /><br/>
    用户年龄:<input type="text" name="user.age" /><br/>
    <input type="submit" value="提交" />
</form>

リクエストパラメータがメソッドにバインドされた、同じ方法

出力:

集計データ型(リスト、マップ)

public class Account implements Serializable {

    private String username;
    private String password;
    private Double money;

    private List<User> list;
    private Map<String,User> map;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }

    public List<User> getList() {
        return list;
    }

    public void setList(List<User> list) {
        this.list = list;
    }

    public Map<String, User> getMap() {
        return map;
    }

    public void setMap(Map<String, User> map) {
        this.map = map;
    }

    @Override
    public String toString() {
        return "Account{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", money=" + money +
                ", list=" + list +
                ", map=" + map +
                '}';
    }
}

params.jspファイル

<!--把数据封装到Account类中,类中存在list和map集合-->
<form action="param/saveAccount" method="post">
    姓名:<input type="text" name="username" /><br/>
    密码:<input type="text" name="password" /><br/>
    金额:<input type="text" name="money" /><br/>
    用户姓名:<input type="text" name="list[0].uname" /><br/>
    用户年龄:<input type="text" name="list[0].age" /><br/>

    用户姓名:<input type="text" name="map['one'].uname" /><br/>
    用户年龄:<input type="text" name="map['one'].age" /><br/>
    <input type="submit" value="提交" />
</form>

出力

カスタム型コンバータ

任意の形式の送信データ型はすべての種類の文字列であるが、Integer型の背景定義は、データは、パッケージ、内部フレームスプリングデフォルトのデータ型変換であってもよいです。

あなたはデータ型変換をカスタマイズしたい場合はコンバータインタフェースを実現することができます。

  1. 新しいユーザークラスの属性の日付を追加します。

    public class User implements Serializable {
    
        private String uname;
        private Integer age;
        private Date date;
    
        public String getUname() {
            return uname;
        }
    
        public void setUname(String uname) {
            this.uname = uname;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public Date getDate() {
            return date;
        }
    
        public void setDate(Date date) {
            this.date = date;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "uname='" + uname + '\'' +
                    ", age=" + age +
                    ", date=" + date +
                    '}';
        }
    }
  2. フォーム

    <form action="param/saveUser" method="post">
        用户姓名:<input type="text" name="uname" /><br/>
        用户年龄:<input type="text" name="age" /><br/>
        出生日期:<input type="text" name="date"/><br/>
        <input type="submit" value="提交" />
    </form>
  3. リクエストパラメータを結合させる方法

    @RequestMapping("/saveUser")
    public String saveUser(User user){
        System.out.println("user保存了");
        System.out.println(user);
        return "success";
    }

    ページを入力します。

    出力:

ページ入力フォーマットの問題は、400エラーが発生します。

ソリューション:

カスタム型コンバータStringToDateConverter

public class StringToDateConverter implements Converter<String,Date> {

    /**
     * String source    传入进来字符串
     * @param source
     * @return
     */
    public Date convert(String source) {
        // 判断
        if(source == null){
            throw new RuntimeException("请您传入数据");
        }
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

        try {
            // 把字符串转换日期
            return df.parse(source);
        } catch (Exception e) {
            throw new RuntimeException("数据类型转换出现错误");
        }
    }
}

springmvc.xml設定ファイルにカスタム型コンバータです

<!--配置自定义类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="com.ben.utils.StringToDateConverter"/>
        </set>
    </property>
</bean>
<!-- 开启SpringMVC框架注解的支持 -->
<mvc:annotation-driven conversion-service="conversionService"/>

出力

おすすめ

転載: www.cnblogs.com/benjieqiang/p/11331742.html