当前位置: 首页 > news >正文

网站开发语言phpjava武汉竞价托管公司

网站开发语言phpjava,武汉竞价托管公司,网站建设的通知,网站开发b2bSpring 对请求参数的优雅处方式(重写序列化方法) 描述前端传参方式介绍代码实现:1、重写序列化方式代码2、设置类自动加载到 Spring 中 描述 在我们日常项目开发过程中,往往会遇到前端请求参数中有空格的情况,前端提交…

Spring 对请求参数的优雅处方式(重写序列化方法)

  • 描述
  • 前端传参方式介绍
  • 代码实现:
    • 1、重写序列化方式代码
    • 2、设置类自动加载到 Spring 中

描述

在我们日常项目开发过程中,往往会遇到前端请求参数中有空格的情况,前端提交后后端的字符串什么形式的都有(例: " xxx ", " xxxxx ", “”, “null” 等等),这样不对空格进行处理直接传参,不仅浪费空间,还会造成数据跟查询结果有出入的情况,引起很多不必要的麻烦。那么,怎么快速的去除前端传参中字符串类型参数的前后空格呢?

前端传参方式介绍

在开发过程中,后端接收前端的传参有两种方式:

  1. 使用 url 或者 form 表单进行传参,后端通过 @RequestParam 注解的方式,从 url 中获取参数。
  2. 使用 body 进行传参,后端通过 @RequestBody 注解进行参数的接收。

对于 url 或者 form 表单的方式,我们在参数绑定时注册下面的类即可对参数进行处理

@RestControllerAdvice
public class GlobalHandler {private static final Logger LOGGER = LoggerFactory.getLogger(GlobalHandler.class);/***  url和form表单中的参数trim* @param binder*/@InitBinderpublic void initBinder(WebDataBinder binder) {// 构造方法中 boolean 参数含义为如果是空白字符串, 是否转换为 null// 即如果为 true, 那么 "" 会被转换为 null, 否者为""binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));}
}

对于使用 body 中的 JSON 或者 XML 的传参方式,在 Spring 中,默认是使用的 Jackson 对参数进行序列化处理,所以对 Jackson 加入如下的自定义转换器即可实现:

@Configuration
public class ApplicationConfig {/*** Request Body中JSON或XML对象参数trim** @return*/@Beanpublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return jacksonObjectMapperBuilder -> {// 时区问题jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());jacksonObjectMapperBuilder.deserializerByType(String.class, new StdScalarDeserializer<String>(String.class) {@Overridepublic String deserialize(JsonParser jsonParser, DeserializationContext ctx)throws IOException {// 去除前后空格return StringUtils.trimWhitespace(jsonParser.getValueAsString());}});};}
}

代码实现:

1、重写序列化方式代码

对于上述的两种传参方式,我们优化一下,将两个合并成一个统一的类来进行实现;

package com.wblog.framework.config;import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import org.springframework.beans.propertyeditors.StringTrimmerEditor;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import javax.servlet.Servlet;
import java.io.IOException;/*** 序列化处理前端请求数据的前后空格* @author wangxk* @date 2023-12-27*/
@Configuration
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
@AutoConfigureAfter(WebMvcAutoConfiguration.class)
public class WebMvcStringTrimAutoConfiguration {@ControllerAdvicepublic static class ControllerStringParamTrimConfig {/*** url和form表单中的参数trim*/@InitBinderpublic void initBinder(WebDataBinder binder) {// 构造方法中 boolean 参数含义为如果是空白字符串,是否转换为null// 即如果为true,那么 " " 会被转换为 null,否者为 ""StringTrimmerEditor stringTrimmerEditor = new StringTrimmerEditor(false);binder.registerCustomEditor(String.class, stringTrimmerEditor);}}/*** Request Body中JSON或XML对象参数trim*/@Beanpublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.deserializerByType(String.class, new StdScalarDeserializer<String>(String.class) {@Overridepublic String deserialize(JsonParser jsonParser, DeserializationContext ctx)throws IOException {System.out.println("Jackson2ObjectMapperBuilderCustomizer jsonParser.getValueAsString() = " + jsonParser.getValueAsString());return StringUtils.trimWhitespace(jsonParser.getValueAsString());}});}
}

2、设置类自动加载到 Spring 中

由于 Spring 启动时,是默认加载同级别目录下所有的 Bean,如果我们重写的 WebMvcStringTrimAutoConfiguration 类是在外部目录时,我们就需要手动去指定一下需要加载的类,在 resurces 下创建 META-INF/spring.factories 文件,将我们的类加到里面去:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.wblog.framework.config.WebMvcStringTrimAutoConfiguration

参考链接:

  1. SpringBoot去除字符串类型参数的前后空格
  2. Springmvc请求参数的优雅处方式
http://www.ritt.cn/news/11253.html

相关文章:

  • 网站系统测试方法网络营销推广策划书
  • 内蒙古互联网公司杭州seo按天计费
  • 想买个服务器做网站网站优化推广招聘
  • 网站开发佛山搜索引擎网站排名优化方案
  • 遵义市做网站的地方软文写作的技巧
  • 城乡建设环保部网站苏州seo关键词优化价格
  • 安徽专业网站建设大全推荐金昌网站seo
  • 深圳金鼎网站建设磁力搜索引擎哪个好
  • 网校网站怎么做网站建设计划书
  • 哪些网站可以做批发衣服建站系统源码
  • 深圳发型网站建设怎么能在百度上做推广
  • 阳江网站制作公众号怎么推广
  • 顺企网吉安网站建设无锡seo优化
  • 国内个人网站建设如何推广宣传一个品牌
  • 新手建设html5网站网络推广主要是做什么工作
  • 诸暨网站开发网站建设方案推广
  • 武汉做网站哪个好seo网络优化师就业前景
  • 龙岗做网站公司百度搜索怎么优化
  • 做网站的费用 优帮云如何检测网站是否安全
  • 免费设计房子的软件上海百度提升优化
  • 怎么做免费的产品图片网站重庆seo论
  • 建站哪家好论坛拉新推广一手接单平台
  • 邯郸网站开发公司nba最新消息新闻报道
  • 南皮网站建设价格网络推广有效果吗
  • 银川网站建设多少钱论坛外链代发
  • 做设计一般用什么素材网站百度公司注册地址在哪里
  • 哪个网站可以做免费推广页面seo优化
  • phpcms 下载网站模板推广信息发布平台
  • 图书馆网站建设方案seo是怎么优化的
  • 温岭市住房和城乡建设局网站windows优化大师免费