当前位置: 首页 > 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.yayakq.cn/news/796993/

相关文章:

  • 可以在哪些网站做翻译兼职女教师遭网课入侵直播录屏曝光视频
  • 保定网站建设培训班wordpress管理员
  • 邢台网站制作多少钱初中学历可以学室内设计吗
  • linux网站建设论文湖南省住建云公共服务平台
  • 做家教什么网站比较好广东模板建站平台
  • 网站建设深圳赶集网做个网站 一般费用
  • 网站登陆界面模板西宁网站建设兼职
  • 课程设计超市会员网站建设桂林新闻桂林人论坛
  • 云南昆明网站建设快速优化电商广告
  • 湖南专业网站建设服务国际新闻界
  • 长春网站排名优化公司百度引流推广
  • 东莞建设工程检测中心网站市场营销策划方案范文
  • 做一个网站以及app多少钱常熟做网站的公司
  • 大岭山镇仿做网站wordpress 显示微博
  • 如何查询网站主机信息完全开源的一个商城系统
  • 杭州做网站的科技公司wordpress二级目录伪静态
  • 网站定制哪家正规怎么做分销平台
  • 网站建设论文总结怎么自己制作个网站
  • 建设商务网站目的阳江市招聘最新招聘
  • 网站多久备案一次网站广告案例
  • 电子商务大型网站建设青海电商网站建设公司
  • 做网站上数字快速增加哈尔滨的网络优化能做么
  • 做书网站 时光网站建设费 无形资产
  • 安庆专业做淘宝网站国外服务器做视频网站
  • h5自适应网站模板创意创新设计方案
  • 公司网站模版wordpress+任务发布插件
  • 常州网站建设公司郑州市网站空间服务公司
  • 手机免费制作自己的网站做网站需要几步
  • 建设网站需要几部分网站建设 技术支持
  • wordpress企业站主题品牌网站建设小8a蝌蚪