SpringMVC基础--请求参数绑定

    科技2022-07-11  82

    SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的。 可以传递的类型有很多: 基本类型:String、Int类型等。 POJO类型:实体类、关联的实体类。 数组和集合类型:List和Map集合等。

    基本类型和String类型作为参数

    <a href="param/string?username=hehe&password=123">传参</a>--%>

    处理请求

    @Controller @RequestMapping("/param") public class paramController { @RequestMapping("/string") public String paramTest(String username, String password) { System.out.println("username: "+ username); System.out.println("password: "+ password); return "hello"; }

    实体类和关联类

    创建好Account实体类和User实体类,Account中将User类作为成员变量。 传参形式: name的值为实体类的常量名

    <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.uage"/><br/> <input type="submit" value="提交"> </form>

    处理该请求:将传递过来的实体类作为处理函数参数

    @RequestMapping("/saveAccount") public String saveAccount(Account account) { System.out.println(account); return "hello"; }

    List和Map集合

    在实体类中加入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].uage"> 年龄2:<input type="text" name="map['one'].uage"> <input type="submit" value="提交"> </form>

    集合是封装在实体类中,所以输出形式就直接输出实体类就可以。

    传递Date类型注意的地方

    我们在表单输入日期,springmvc会给我们自动进行类型转换,将我们输入的string类型转换为日期类型,输入1999/09/13可以转换,但我们输入1999-09-13时就不能将其转换为日期类型从而提交报错。

    解决方法:自定义类型转换器 自定义将string类转换为日期类型的类,继承Converter转换接口,实现转换方法。 Converter接口 S代表被转换为的类型,T为转换的目标类型

    @FunctionalInterface public interface Converter<S, T> { @Nullable T convert(S var1); }

    自定义转换类,利用DateFormat的parse方法来实现转换。

    public class stringToDateConverter implements Converter<String,Date> { @Override public Date convert(String s) { try { if (s==null) { throw new NullPointerException("请输入日期"); } else { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-DD"); Date parse = dateFormat.parse(s); return parse; } } catch (Exception e) { throw new RuntimeException("输入日期有误"); } } }

    创建好自定义类型转换器之后要与取代原来的类型转换,在配置文件中配置类型转换。

    <!-- 配置类型转换工厂 --> <bean id="conversionService2" class="org.springframework.context.support.ConversionServiceFactoryBean"> <!-- 给工厂注入一个新的类型转换器 --> <property name="converters"> <array> <!-- 注入自定义类型转换器 --> <bean class="cn.controller.stringToDateConverter"></bean> </array> </property> </bean>

    最后,使用该类型转换。

    <!-- 开启注解支持 , 同时引用配置的类型转换工厂--> <mvc:annotation-driven conversion-service="conversionService2"></mvc:annotation-driven>

    中文乱码问题

    表单中输入中文报错,在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>
    Processed: 0.011, SQL: 8