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

小说阅读网站开发源码上海优化外包公司排名

小说阅读网站开发源码,上海优化外包公司排名,荆门网站开发公司电话,东莞路桥投资发展有限公司Spring 对请求参数的优雅处方式(重写序列化方法) 描述前端传参方式介绍代码实现: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.dinnco.com/news/19074.html

相关文章:

  • 自己做的商业网站在那里发布seo排名计费系统
  • 做前端网站用什么工具百度客户端官网
  • 做网站首页的表格的代码微博今日热搜榜
  • 源码商城源码重庆网站seo外包
  • 个人网站做多久有效果seo技术分享博客
  • 北京市委宣传部seo国外推广软件
  • 买卖网站域名骗局项目推广方式有哪些
  • 专门做网站的公司交什么怎么创建网站教程
  • 网站建设找哪一家好如何创建网站平台
  • 天津 公司网站建设谷歌网页版入口在线
  • 做微网站的公司哪家好呢做网站用哪个软件
  • 成都有实力的网站建设天眼查企业查询入口
  • 开网站赚50万做厦门小鱼网
  • 团总支网站建设宣传什么是seo技术
  • 网站建设哪家强最新足球新闻头条
  • 骗局 网站到期百度数据研究中心官网
  • 正规app开发和制作公司百度seo推广免费
  • 企业网页设计报价中山网站seo
  • 阿里云一个域名做两个网站网络推广营销
  • 做二手房比较好的网站关键词搜索
  • 北京网站建设公司现状郑州seo关键词排名优化
  • 个人备案做公司网站网站改版公司哪家好
  • 网站程序代码优化免费推广途径与原因
  • 平面设计专业学校排名专业网站优化推广
  • 手机网站 备案推广软文是什么
  • 网站建设的背景有哪些优化方案的格式及范文
  • 宣传网站怎么做的安阳seo
  • 金山品牌网站建设足球排名最新排名世界
  • 天津做网站外包公司seo词条
  • 建设银行网站服务功能国内产女装一线二线品牌知乎