SpringMvc入门(二)

RequestMapping
SpringMvc(一)写了一点点关于@RequestMapping,这篇我们来看看它的一些属性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
请求参数的绑定就是后端获取前端请求参数的过程
前端传过来的参数,可能又一个,多个,而我们处理的时候,又分为基本数据类型和String,javabean,以及集合的形式
1.一个请求参数:

jsp页面

 <a href="/param/testparam?username=hehe">请求参数的绑定</a>
@RequestMapping("/testparam")
    public  String testparam(String username){
        System.out.println("执行了");
        System.out.println(username);
        return "success";
    }

在这里插入图片描述
我们发现只需要名称(username)一样,SpringMVC就可以直接获取到请求参数的值
2.请求参数封装成一个javaBean对象
怎么封装呢???
声明一个bean对象:Account,一定要记住生成set方法呀,要不然会为null,封装不进去
在这里插入图片描述
声明一个bean对象:User一定要记住生成set方法呀,要不然会为null,封装不进去

在这里插入图片描述
我们看到Account中有引用类型User,那么如何封装呢???

 @RequestMapping("/savamony")
    public  String javabeanparam(Account account){
        System.out.println(account);
        return "success";
    }
<form action="/param/savamony" method="post">
    姓名<input type="text" name="name"/><br>
    年龄<input type="text" name="age"><br>
    钱<input type="text" name="money"><br>
    用户的姓名<input type="text" name="user.username"><br>
    用户的id<input type="text" name="user.id"><br>
    <input type="submit" value="提交">
</form>

我们可以看到用户的姓名:name=“user.username”;主意"user",是Account的属性
"username"是User的属性,一定要匹配才行。
3.请求参数封装成到集合中
在这里插入图片描述

 @RequestMapping("/savamony")
    public  String javabeanparam(Account account){
        System.out.println(account);
        return "success";
    }
<form action="/param/savamony" method="post">
    姓名<input type="text" name="name"/><br>
    年龄<input type="text" name="age"><br>
    钱<input type="text" name="money"><br>
    用户的姓名<input type="text" name="list[0].username"><br>
    用户的id<input type="text" name="list[0].id"><br>
    用户的姓名<input type="text" name="map['one'].username"><br>
    用户的id<input type="text" name="map['one'].id"><br>
    <input type="submit" value="提交">
</form>

相信大家一看代码就会恍然大悟
在这里插入图片描述
当方法的请求方式是post的时候就会出现中文乱码的问题
之前的时候我们都是在request中设置,现在我们可以在拦截器中进行设置
在web.xml中:

  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
     <!--encoding是CharacterEncodingFilter的一个属性-->
      <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>

在这里插入图片描述

@RequestMapping("/testServlet")
    public  String testServlet(HttpServletRequest request, HttpServletResponse response){
        System.out.println("执行了");
        System.out.println(request);
        HttpSession session = request.getSession();
        System.out.println(session);
        ServletContext servletContext = session.getServletContext();
        System.out.println(servletContext);
        System.out.println("response"+response);
        return "success";
    }

我们发现只需要将HttpServletRequest和HttpServletResponse 作为参数即可

org.apache.catalina.connector.RequestFacade@6baeb3
org.apache.catalina.session.StandardSessionFacade@1d5690d
org.apache.catalina.core.ApplicationContextFacade@1cab944
responseorg.apache.catalina.connector.ResponseFacade@d195c6

在这里插入图片描述
为什么要自定义转换器呢?
因为我们前端传过去的数据类型都是String类型的,但是在封装的时候springmvc会帮我们转换,
大多数情况下,都是没有问题的是,但是也有例外
eg:2000/1/23可以帮助我们转成日期类型,但是2000-1-23就会报错,对于这种格式springmvc转不了,就需要我们去定义。
解决方法:
我们自定义一个转换器,当前端控制器调用的时候,就调用我们自己编写的转换器
所有的自定义转换器都需要实现这个接口Converter

在这里插入图片描述
前面是字符串,后面是我们需要转换的类型
1.创建一个转换器类:
在这里插入图片描述
但是我们创建了一个转换器类,我们怎么让他发挥作用呢???
还记得我们的视图解析器吗??
我们是在springmvc.xml中进行配置的,那么同样我们的转换器StringToDateConverter
也一样。

   <!-- 配置自定义的转换器-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <!-- 我们现在的这个bean对象和我写的自定的转换器的类并没有什么联系啊-->
        <!-- converters是ConversionServiceFactoryBean中的一个属性,是Set类型的我们为它注入值-->
        <property name="converters">
            <set>
             <!-- 配置我们自定义的转换器的路径-->
                <bean class="cn.itcast.utils.StringToDateConverter"/>
            </set>
        </property>
    </bean>

配置了,但是怎么生效呢???
还记得<mvc:annotation-driven conversion-service="conversionService"/>
这里面我们就可以进行加入conversion-service="conversionService"就可以让我们自己写得转换器生效了。
让我们来看一下吧!!!
在这里插入图片描述

<form action="/param/savauser" method="post">
    用户的姓名<input type="text" name="username"><br>
    用户的id<input type="text" name="id"><br>
    用户的假期<input type="text" name="holiday"><br>
    <input type="submit" value="提交">
</form>
 @RequestMapping("/savauser")
    public  String savauser(User user){
        System.out.println("执行了");
        System.out.println(user);
        return "success";
    }

在这里插入图片描述
在这里插入图片描述
自定义转换器成功!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值