问题描述:后端数据库存储为文本形式,其中文本中有"\n",但前端调用后端接口后,返回数据多出一个斜杠("\"),造成换行失效。
原因分析:原始字符串中为单斜杠("\n"),但通过@RestController后返回到前端会变为双斜杠("\\n"),原因是因为:@RestController相当于@Controller和@ResponseBody,而@ResponseBody是转Json的。
解决办法:
String str = "证件信息不匹配,请重新输入,如有疑问请联系:\\n\\n400 8855 258";
采用 StringEscapeUtils.unescapeJavaScript(str )方法,此种方法返回结果满足要求,返回结果为:"证件信息不匹配,请重新输入,如有疑问请联系:\n\n400 8855 258"
String newString = StringEscapeUtils.unescapeJavaScript(str );
Map<Object, Object> map = new HashMap<>();
map.put("escapeHtml",StringEscapeUtils.escapeHtml("<a>abc</a>"));
map.put("unescapeHtml",StringEscapeUtils.unescapeHtml("<a>abc</a>"));
map.put("escapeJavaScript",StringEscapeUtils.escapeJavaScript("<script>alert('123')<script>"));
map.put("unescapeJavaScript",StringEscapeUtils.unescapeJavaScript("<script>alert(\'123\')<script>"));
map.put("escapeJava",StringEscapeUtils.escapeJava("你好"));
map.put("unescapeJava",StringEscapeUtils.unescapeJava("\u4F60\u597D"));
map.put("escapeXml",StringEscapeUtils.escapeXml("<name>贝贝</name>"));
map.put("unescapeXml",StringEscapeUtils.unescapeXml("<name>贝贝</name>"));
StringBuffer sql = new StringBuffer("select * from users where 1=1 ");
String keyWord="aaa' or '1=1";
sql.append(" and username like '%" + StringEscapeUtils.escapeSql(keyWord) + "%'");
map.put("escapeSql",sql.toString());
{
"unescapeJava": "你好",
"escapeSql": "select * from users where 1=1 and username like '%aaa'' or ''1=1%'",
"escapeHtml": "<a>abc</a>",
"unescapeJavaScript": "<script>alert('123')<script>",
"escapeXml": "<name>贝贝</name>",
"escapeJava":"\你\好",
"unescapeHtml": "<a>abc</a>",
"escapeJavaScript": "<script>alert(\\'123\\')<script>",
"unescapeXml": "<name>贝贝</name>"
}