做网站后期为什么续费中国站免费推广入口
web/
2025/9/26 5:31:53/
文章来源:
做网站后期为什么续费,中国站免费推广入口,360网站页面的工具栏怎么做,国家建设部网站官网证件查询Spring 对请求参数的优雅处方式#xff08;重写序列化方法#xff09; 描述前端传参方式介绍代码实现#xff1a;1、重写序列化方式代码2、设置类自动加载到 Spring 中 描述
在我们日常项目开发过程中#xff0c;往往会遇到前端请求参数中有空格的情况#xff0c;前端提交… Spring 对请求参数的优雅处方式重写序列化方法 描述前端传参方式介绍代码实现1、重写序列化方式代码2、设置类自动加载到 Spring 中 描述
在我们日常项目开发过程中往往会遇到前端请求参数中有空格的情况前端提交后后端的字符串什么形式的都有例 xxx , xxxxx , “”, “null” 等等这样不对空格进行处理直接传参不仅浪费空间还会造成数据跟查询结果有出入的情况引起很多不必要的麻烦。那么怎么快速的去除前端传参中字符串类型参数的前后空格呢
前端传参方式介绍
在开发过程中后端接收前端的传参有两种方式
使用 url 或者 form 表单进行传参后端通过 RequestParam 注解的方式从 url 中获取参数。使用 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 StdScalarDeserializerString(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 StdScalarDeserializerString(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参考链接
SpringBoot去除字符串类型参数的前后空格Springmvc请求参数的优雅处方式
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81340.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!