notes notes
首页
  • 主题初衷与诞生
  • 介绍
  • 快速上手
  • 目录结构
  • 相关文章

    • 使目录栏支持h2~h6标题
    • 如何让你的笔记更有表现力
    • 批量操作front matter工具
    • 部署
    • 关于写文章和H1标题
    • 关于博客搭建与管理
  • PostgreSQL 全文搜索
  • 依赖注入
  • 开发常见问题
  • 逻辑删除
  • TCP 粘包和拆包
  • netty 粘包和拆包
  • 在k8s集群中搭建一个harbor私有仓库
  • 优雅停机
  • helm 命令学习
  • yield 关键字
  • 不定参数
TODO
  • REST API
  • 使用 IntelliJ IDEA 反编译 jar
  • Spring Boot 删除前后空白字符
  • 设计模式

    • 装饰器模式
Docker
Tool Box (opens new window)
GitHub (opens new window)
首页
  • 主题初衷与诞生
  • 介绍
  • 快速上手
  • 目录结构
  • 相关文章

    • 使目录栏支持h2~h6标题
    • 如何让你的笔记更有表现力
    • 批量操作front matter工具
    • 部署
    • 关于写文章和H1标题
    • 关于博客搭建与管理
  • PostgreSQL 全文搜索
  • 依赖注入
  • 开发常见问题
  • 逻辑删除
  • TCP 粘包和拆包
  • netty 粘包和拆包
  • 在k8s集群中搭建一个harbor私有仓库
  • 优雅停机
  • helm 命令学习
  • yield 关键字
  • 不定参数
TODO
  • REST API
  • 使用 IntelliJ IDEA 反编译 jar
  • Spring Boot 删除前后空白字符
  • 设计模式

    • 装饰器模式
Docker
Tool Box (opens new window)
GitHub (opens new window)
  • Java

    • 问答
    • 使用 IntelliJ IDEA 反编译 jar
    • Spring Boot 删除前后空白字符
    • 设计模式

      • 装饰器模式

        • 装饰器模式
    目录

    Spring Boot 删除前后空白字符

    在 Spring Boot 应用中,通过 jackson 可以去掉请求数据中前后空白字符。

    可以使用这种方法统一处理 Timestamp、 Enum 等类型的序列化和反序列化。

    # 局部

    只处理某些请求的某些字段,可自定义一个反序列化处理器,并在需要处理的字段上使用该处理器。

    // 定义一个反序列化处理器
    public static class Deserializer extends JsonDeserializer<String> {
    
            @Override
            public String deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException {
                ObjectCodec codec = jsonParser.getCodec();
                JsonNode tree = codec.readTree(jsonParser);
                return tree.textValue().trim();
            }
    
        }
    
    // 在需要处理的字段上使用该处理器
    @Data
    public class RequestDTO {
    
        @JsonDeserialize(using = Deserializer.class)
        private String notificationStatus;
    
    }
    
    

    # 全局

    如果所有的字段都需要处理,逐个字段添加反序列化处理器显然不是一个好方案,此时需全局处理。

    # 方法一

    依 Spring Boot官方文档 (opens new window) 自定义一个反序列化器,并使用 JsonComponent 注解自动注册为全局处理器,这也是与 局部 处理最大的不同。

    package com.test.config;
    
    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.core.ObjectCodec;
    import com.fasterxml.jackson.databind.DeserializationContext;
    import com.fasterxml.jackson.databind.JsonDeserializer;
    import com.fasterxml.jackson.databind.JsonNode;
    import org.springframework.boot.jackson.JsonComponent;
    
    import java.io.IOException;
    
    @JsonComponent
    public class StringDeserializer {
    
        public static class Deserializer extends JsonDeserializer<String> {
    
            @Override
            public String deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException {
                ObjectCodec codec = jsonParser.getCodec();
                JsonNode tree = codec.readTree(jsonParser);
                return tree.textValue().trim();
            }
    
        }
    
    }
    
    

    # 方法二

    package com.test.config;
    
    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.databind.DeserializationContext;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
    import com.fasterxml.jackson.databind.module.SimpleModule;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.io.IOException;
    
    @Configuration
    public class JacksonConfig {
    
        public static class StringTrimModule extends SimpleModule {
    
            public StringTrimModule() {
                // 添加一个 String 类型的反序列化处理器,将其前后空格祛除
                addDeserializer(String.class, new StdScalarDeserializer<String>(String.class) {
                    @Override
                    public String deserialize(JsonParser jsonParser, DeserializationContext ctx) throws IOException {
                        return jsonParser.getValueAsString().trim();
                    }
                });
            }
        }
    
        /**
         * 注入 ObjectMapper bean, 并将自定义的 StringTrimModule 注册其中
         */
        @Bean
        public StringTrimModule stringTrimModule(ObjectMapper mapper) {
            StringTrimModule stringTrimModule = new StringTrimModule();
            mapper.registerModule(stringTrimModule);
            return stringTrimModule;
        }
    
    }
    
    
    
    上次更新: 2023/12/08, 06:34:37
    使用 IntelliJ IDEA 反编译 jar
    装饰器模式

    ← 使用 IntelliJ IDEA 反编译 jar 装饰器模式→

    Theme by Vdoing | Copyright © 2023-2023
    Powered by vuepress-theme-vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式