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