如何配置Jackson保留换行前的空白字符?
问题
我的应用设有Web文本输入框,输入的数据存入数据库后,再次展示时开头的空白字符消失,怀疑是Jackson ObjectMapper导致该问题。我使用SpringBoot 3.0.6版本,相关场景显示:WebUI输入界面输入了带开头空白的文本,数据库中存储的内容保留了空白,Java应用映射至UI-DTO前的调试器界面也能看到空白,但浏览器显示界面中开头空白消失。当前ObjectMapper配置代码如下:
@Bean public ObjectMapper objectMapper() { var objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); objectMapper.setSerializationInclusion(Include.NON_NULL); var p = new DefaultPrettyPrinter(); Indenter i = new DefaultIndenter(" ", "\n"); p.indentArraysWith(i); p.indentObjectsWith(i); objectMapper.setDefaultPrettyPrinter(p); return objectMapper; }
请问如何配置ObjectMapper以保留空白字符?
解决方案
显式关闭Jackson的
TRIM_STRING_VALUES特性,阻止自动修剪字符串首尾空白:
在你的ObjectMapper配置方法中添加以下代码:objectMapper.disable(MapperFeature.TRIM_STRING_VALUES);检查项目中是否存在自定义的字符串序列化器或反序列化器,确保这些组件没有对字符串执行trim操作。
额外排查:Jackson默认不会自动修剪字符串空白,若添加上述配置后问题仍存在,建议查看接口返回的原始JSON数据(可通过浏览器开发者工具的网络面板查看),确认空白是否真的在序列化阶段丢失。如果JSON数据中存在空白,那问题可能出在前端渲染逻辑(比如HTML默认会合并连续空白字符,可通过CSS的
white-space: pre-wrap等属性保留空白)。
内容的提问来源于stack exchange,提问作者user286974
相关产品推荐
相关产品推荐

