使用Springboot自定义转换器实现参数去空格功能

目录
  • 自定义转换器实现参数去空格
    • 1.自定义转换器类
    • 2.将转换器交给spring容器处理
  • SpringBoot请求参数过滤空格
    • 1、参数修改SpaceHttpServletRequestWrapper
    • 2、空格过滤器
    • 3、过滤器初始化

自定义转换器实现参数去空格

1.自定义转换器类

实现Converter<S, T>类,重写convert()方法,直接上代码。

/**
* 自定义转换器
* 去掉前后空格
* @author liuy
* @version 2018年11月13日
*/
public class CustomConverter implements Converter<String, String>{
 @Override
 public String convert(String source) {
  try {
   if(source != null){
    source = source.trim();
    if(!"".equals(source)){
     return source;
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }
}

2.将转换器交给spring容器处理

@Configuration
public class SpringdataConvert {
 @Autowired
 private RequestMappingHandlerAdapter requestMappingHandlerAdapter;

 @PostConstruct
 public void addConversionConfig(){
  ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) requestMappingHandlerAdapter.getWebBindingInitializer();
  if(initializer.getConversionService()!=null){
   GenericConversionService genericConversionService =(GenericConversionService) initializer.getConversionService();
   genericConversionService.addConverter(new CustomConverter());
  }
 }
}

SpringBoot请求参数过滤空格

1、参数修改SpaceHttpServletRequestWrapper

public class SpaceHttpServletRequestWrapper extends HttpServletRequestWrapper {
    public SpaceHttpServletRequestWrapper(HttpServletRequest servletRequest) {
        super(servletRequest);
    }
    @Override
    public String[] getParameterValues(String parameter) {
        String[] values = super.getParameterValues(parameter);
        if (values == null) {
            return new String[0];
        }
        int count = values.length;
        String[] encodedValues = new String[count];
        for (int i = 0; i < count; i++) {
            encodedValues[i] = values[i].trim();
        }
        return encodedValues;
    }
    @Override
    public String getParameter(String parameter) {
        String value = super.getParameter(parameter);
        if (value == null) {
            return null;
        }
        return value.trim();
    }
}

2、空格过滤器

public class SpaceFilter implements Filter {
    private FilterConfig filterConfig;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws
            IOException, ServletException {
        filterChain.doFilter(new SpaceHttpServletRequestWrapper(
                (HttpServletRequest) servletRequest), servletResponse);
    }
    @Override
    public void destroy() {
        this.filterConfig = null;
    }
}

3、过滤器初始化

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
    @Bean
    public FilterRegistrationBean spaceFilter() {
        FilterRegistrationBean fitler = new FilterRegistrationBean();
        fitler.setFilter(new SpaceFilter());
        fitler.addUrlPatterns("/*");
        fitler.setName("SpaceFilter");
        fitler.setDispatcherTypes(DispatcherType.REQUEST);
        return fitler;
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot中自定义参数绑定步骤详解

    正常情况下,前端传递来的参数都能直接被SpringMVC接收,但是也会遇到一些特殊情况,比如Date对象,当我的前端传来的一个日期时,就需要服务端自定义参数绑定,将前端的日期进行转换.自定义参数绑定也很简单,分两个步骤: 1.自定义参数转换器 自定义参数转换器实现Converter接口,如下: public class DateConverter implements Converter<String,Date> { private SimpleDateFormat simpleDateFor

  • SpringBoot项目如何把接口参数中的空白值替换为null值(推荐)

    问题发生 我们公司代码生成的时候,查询列表统一都是使用了setEntity() ,查询写法如下: public List<BasReservoirArea> selectList(BasReservoirArea basReservoirArea) { QueryWrapper<BasReservoirArea> where = new QueryWrapper<>(); where.setEntity(basReservoirArea); return baseMap

  • Springmvc自定义类型转换器实现步骤

    一.什么是springmvc类型转换器? 在我们的ssm框架中,前端传递过来的参数都是字符串,在controller层接收参数的时候springmvc能够帮我们将大部分字符串类型的参数自动转换为我们指定的参数,这就是springmvc为我们提供的类型转换器.但是springmvc提供的类型转换器只能够转换指定格式的参数,例如:我们参数中传递time=2020/08/18,在controller中我们就可以通过Date类型的参数接收它,springmvc能够自动将该日期字符串转换为日期对象.但是如

  • Spring boot中自定义Json参数解析器的方法

    一.介绍 用过springMVC/spring boot的都清楚,在controller层接受参数,常用的都是两种接受方式,如下 /** * 请求路径 http://127.0.0.1:8080/test 提交类型为application/json * 测试参数{"sid":1,"stuName":"里斯"} * @param str */ @RequestMapping(value = "/test",method = Re

  • SpringBoot中自定义注解实现参数非空校验的示例

    前言 由于刚写项目不久,在写 web 后台接口时,经常会对前端传入的参数进行一些规则校验,如果入参较少还好,一旦需要校验的参数比较多,那么使用 if 校验会带来大量的重复性工作,并且代码看起来会非常冗余,所以我首先想到能否通过一些手段改进这点,让 Controller 层减少参数校验的冗余代码,提升代码的可阅读性. 经过阅读他人的代码,发现使用 annotation 注解是一个比较方便的手段,SpringBoot 自带的 @RequestParam 注解只会校验请求中该参数是否存在,但是该参数是

  • 使用Springboot自定义转换器实现参数去空格功能

    目录 自定义转换器实现参数去空格 1.自定义转换器类 2.将转换器交给spring容器处理 SpringBoot请求参数过滤空格 1.参数修改SpaceHttpServletRequestWrapper 2.空格过滤器 3.过滤器初始化 自定义转换器实现参数去空格 1.自定义转换器类 实现Converter<S, T>类,重写convert()方法,直接上代码. /** * 自定义转换器 * 去掉前后空格 * @author liuy * @version 2018年11月13日 */ pub

  • java 对象参数去空格方式代码实例

    这篇文章主要介绍了java 对象参数去空格方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 import java.lang.reflect.Field; import java.lang.reflect.Method; public class Test { /** * 去掉bean中所有属性为字符串的前后空格 * * @param bean * @throws Exception */ public static void bea

  • SpringBoot自定义转换器应用实例讲解

    目录 1.基本介绍 2.自定义类型转换器应用实例 1.需求说明 2.代码实现 3.注意事项及使用细节 1.基本介绍 SpringBoot 在响应客户端请求时,将提交的数据封装成对象时,使用了内置的转换器 SpringBoot 也支持自定义转换器, 这个内置转换器在 debug 的时候, 可以看到, 提供了 124 个内置转换器. 看下源码 GenericConverter-ConvertiblePair 2.自定义类型转换器应用实例 1.需求说明 演示自定义转换器使用 2.代码实现 1.修改sr

  • SpringBoot去除参数前后空格和XSS过滤

    去除XSS字符串需要借助工具类 jsoup ,这里jsoup有一点需要注意的是,jsoup的功能可能有点太强大了,能把xss攻击的内容直接过滤掉了不说,也会对英文尖括号<>转义,到接口里面拿到的参数就变成了<>,存库里面的就是转义后的字符串了.取出来的时候需要转一下. 比如前台传的参数传的是: 12<>3<script>alter('11111111')</script>455 过滤处理了后,到后台接口里面就成了:[12<>3455]

  • SpringBoot通过自定义注解实现参数校验

    目录 1. 为什么要进行参数校验 2. 如何实现参数校验 3. 注解实现参数校验 4. 自定义注解实现参数校验 1. 为什么要进行参数校验 在后端进行工作时,需要接收前端传来的数据去数据库查询,但是如果有些数据过于离谱,我们就可以直接把它pass掉,不让这种垃圾数据接触数据库,减小数据库的压力. 有时候会有不安分的人通过一些垃圾数据攻击咱们的程序,让咱们的服务器或数据库崩溃,这种攻击虽然低级但不得不防,就像QQ进行登录请求时,它们向后端发送 账号=123,密码=123 的数据,一秒钟还发1w次,

  • 使用SpringBoot请求参数过滤空格

    目录 SpringBoot请求参数过滤空格 1.参数修改SpaceHttpServletRequestWrapper 2.空格过滤器 3.过滤器初始化 SpringBoot指定执行参数,参数值包含空格问题 方式一(错误): 方式二(错误): 方式三(错误): 方式四(错误): 方式五(正确): SpringBoot请求参数过滤空格 1.参数修改SpaceHttpServletRequestWrapper public class SpaceHttpServletRequestWrapper ex

  • SpringBoot自定义对象参数实现自动类型转换与格式化

    目录 序章 一.实体类 Bean 二.前端表单index.html 三.Controller 类 四.运行结果截图 序章 问题提出一: 当我们用表单获取一个 Person 对象的所有属性值时, SpringBoot 是否可以直接根据这些属性值将其转换为 Person 对象 回答: 当然可以,SpringBoot 通过自定义对象参数,可以实现自动类型转换与格式化,并可以级联封装(一个对象拥有另一个对象作为属性时,也可以封装). 一.实体类 Bean person类 注: 构造方法一定要写全,无参数

  • SpringBoot请求处理之常用参数注解介绍与源码分析

    目录 1.注解 2.注解生效相关源码分析 3.Servlet API 4.复杂参数 5.自定义参数 6.类型转换器Converters 1.注解 @PathVariable:将请求url中的占位符参数与控制器方法入参绑定起来(Rest风格请求) @RequestHeader:获取请求头中的参数,通过指定参数 value 的值来获取请求头中指定的参数值 @ModelAttribute:两种用法 用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,

  • SpringBoot之使用枚举参数案例详解

    接口开发过程中不免有表示类型的参数,比如 0 表示未知,1 表示男,2 表示女.通常有两种做法,一种是用数字表示,另一种是使用枚举实现. 使用数字表示就是通过契约形式,约定每个数字表示的含义,接口接收到参数,就按照约定对类型进行判断,接口维护成本比较大. 在 Spring 体系中,使用枚举表示,是借助 Spring 的 Converter 机制,可以将数字或字符串对应到枚举的序号或者 name,然后将前端的输入转换为枚举类型. 在场景不复杂的场景中,枚举可以轻松胜任. 于是,迅速实现逻辑,准备提

随机推荐