SpringMVC全局乱码过滤器、注解@RequestParam、自定义类型转换器

举报
执久呀 发表于 2022/10/22 21:16:33 2022/10/22
【摘要】 ​目录配置全局乱码过滤器参数绑定注解@RequestParam注解@RequestParam的参数使用说明获得Restful风格的参数自定义类型转换器自定义转换器的开发步骤: 获得Servlet相关API配置全局乱码过滤器请求数据的乱码问题当postt请求时,数据会出现乱码,我们可以设置一个过滤器来进行编码的过滤。在web.xml中配置过滤器即可<!--配置过滤的filter--><filt...

目录

配置全局乱码过滤器

参数绑定注解@RequestParam

注解@RequestParam的参数使用说明

获得Restful风格的参数

自定义类型转换器

自定义转换器的开发步骤:

 获得Servlet相关API




配置全局乱码过滤器

请求数据的乱码问题

当postt请求时,数据会出现乱码,我们可以设置一个过滤器来进行编码的过滤。

在web.xml中配置过滤器即可


<!--配置过滤的filter-->
<filter>
<!--起个名字    -->
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<!-- 将字符集设置utf-8   -->
    <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>

参数绑定注解@RequestParam

当请求的参数名称与Controller的业务方法参数名称不一致是,就需要通过@RequestParam注解显式的绑定

编辑

业务方法中的参数为username,请求的参数为name,两者不一致,所以需要进行绑定,使用@RequestParam(value="name")进

注解@RequestParam的参数使用说明

value:与请求参数名称

required:指在指定的请求参数是否必须包括,默认是true,默认值下提交时如果没有此参数则报错

defaultValue:放没有指定参数时,则使用的默认值赋值

获得Restful风格的参数

Restful是一种软件架构风格、设置风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客服端和服务器交互的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等

Restful风格的请求是使用“url+请求方式”表示一次请求的目的地,HTTP协议里面四个表示操作方式的动词如下

  • GET:用于获取资源
  • POST:用于新建资源
  • PUT:用于更新资源
  • DELETE:用于删除资源

例如:

  • /user/1   GET:              得到id=1的user
  • /user.1   DELETE:        删除id=1的user
  • /user/1    PUT:             更新id=1的user
  • /user        POST:        新增user

上述url地址/user/1中的1就是要获得的请求参数,在SpringMVC中可以使用占位符进行参数绑定。地址/user/1可以写成/user/{id},占位符{id}对应的就是1的值。在业务方法中我们可以使用@PathVariable注解进行占位符的匹配获取工作。

编辑


//配置类,使用注解把这个类放到容器中
@Controller
@RequestMapping(value="/user")
    public class userController {
    //localhost:8080/quick17/zhangsan
    @RequestMapping(value = "/quick17/{username}",method=RequestMethod.GET) 
    @ResponseBody
    public void save17(@PathVariable(value = "username") String username)  {
        System.out.println(username);
    }
}

编辑

 控制台就会打印出张三

自定义类型转换器


SpringMVC默认已经提供了一些常用的类型转换器,例如客户端提交得字符串转化为int型进行参数设置但不是所有的数据类型都提供了转换器,没有提供的就需要自定义转换器,例如:日期类型的数据就需要自定义转换器。

自定义转换器的开发步骤:

  • ①定义转换器类实现Converter接口
  • ②在配置文件中声明转换器
  • ③在<annotation-driven>中引用转换器

时间类型的,Spring提供了yyyy/MM/dd的日期输入格式,但是我们习惯使用,如2022-7-21而不会写2022/7/21,我们没按照规定写就会报错,所以我们配置自定义的转换器

①定义转换器类实现Converter接口

在converter包下。

package com.converter;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
//Converter<s,d>String类型转date类型
public class DateConverter implements Converter<String, Date> {
    public Date convert(String dateStr) {
        //将日期的字符串转换成日期对象 返回
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = format.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}

②在配置文件中声明转换器

spring-mvc.xml中


<!--申明转换器 -->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="com.converter.DateConverter"/>
            </list>
        </property>
    </bean>

③在<annotation-driven>中引用转换器

也在spring-mvc.xml中

<!--    mvc配置注解驱动-->
    <mvc:annotation-driven conversion-service="conversionService"/>

编辑

 获得Servlet相关API

SpringMVC支持使用原始ServletAPI对象作为控制器方法的参数进行注入,常用的对象如下:

  • HttpServletyRequest
  • HttpServletResponse
  • HttpSession

编辑

会打印一些地址。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。