Spring Boot REST接口如何阻止TEXT字段中\n转为\\n?
解决Spring Boot返回JSON时换行符被转义的问题
问题背景
项目中用Spring Boot搭建REST端点,PostgreSQL数据库里有一张带TEXT类型列的表,该字段存储的是要在前端解析为Markdown的文本,示例内容如下:
# This is my headline This is a paragraph of text ## This is a subhead
对应的端点代码:
@GetMapping(value = "/nations") private List<Nation> getAllNations() { return nationDAO.getAllNations(); }
调用端点后发现,返回的JSON里TEXT字段的\n被自动转成了\\n,示例返回结果:
[ { "id": 1, "myTextField": "# This is my headline\\n\\nThis is a paragraph of text\\n\\n## This is a subhead", "population": 123456 } ]
需要阻止这种转义,让换行符以原始的\n形式返回。
解决方案
方法1:全局配置Jackson序列化规则
Spring Boot默认用Jackson处理JSON序列化,可通过配置关闭非ASCII字符的转义(包含换行符):
application.properties配置
spring.jackson.serialization.escape-non-ascii=false
application.yml配置
spring: jackson: serialization: escape-non-ascii: false
方法2:针对特定字段添加注解
如果只需要处理单个字段,在实体类的目标字段上添加@JsonRawValue注解,让Jackson直接输出原始字符串内容:
public class Nation { private Long id; @JsonRawValue private String myTextField; private Long population; // 省略getter、setter方法 }
注意:使用该注解时要确保字段内容不包含未转义的双引号,避免破坏JSON结构。
方法3:自定义Jackson序列化器
要是需要更精细的转义控制,可自定义序列化器处理字符串输出:
public class UnescapedStringSerializer extends StdSerializer<String> { public UnescapedStringSerializer() { super(String.class); } @Override public void serialize(String value, JsonGenerator gen, SerializerProvider provider) throws IOException { if (value != null) { // 仅转义双引号,保留换行符 gen.writeRawValue("\"" + value.replace("\"", "\\\"") + "\""); } else { gen.writeNull(); } } }
然后在实体类字段上指定该序列化器:
public class Nation { private Long id; @JsonSerialize(using = UnescapedStringSerializer.class) private String myTextField; private Long population; // 省略getter、setter方法 }
内容的提问来源于stack exchange,提问作者royalenfield
相关产品推荐
相关产品推荐

