作为 Spring 应用程序的一部分,我正在发回一个很长的字符串作为 Http 响应主体,并且响应字符串包含访问日志行,其中每一行都应该有一个制表符(\t)以及一个新的行符(\n).
每一行都被制作成:
String.format("%s\t%s\n", accessLog.getIpAddress(), accessLog.getDate())
通过 Charles 代理测试 API,两个特殊字符都显示良好。但是,使用 Chrome 浏览器进行测试时,由于某种原因,\t 和\n 都被替换为空格。
另外,我正在使用 Spring @ResponseBody
注释发送这行访问日志。这有什么问题吗?
下面是Controller.java:
@RequestMapping("/get_access_log.do")
@ResponseBody
public String test() throws Exception {
return result = accessLogBO.extractTest();
}
访问日志BO.java:
public String extractTest() throws IOException {
String inputFile = "C:\\Users\\input.txt";
String response = "";
FileReader fr = new FileReader(inputFile);
BufferedReader br = new BufferedReader(fr);
StringBuilder sb = new StringBuilder();
String line = null;
while((line = br.readLine()) != null) {
String formattedLine = format(line);
sb.append(formattedLine);
}
}
br.close();
fr.close();
return sb.toString();
}
private String format(String line) {
AccessLog accessLog = parseAccessLog(line);
return String.format("%s\t%s\n", accessLog.getIpAddress(), accessLog.getDate());
}
错误案例截图:Error case screenshot from Chrome brower
谁能帮我解决这个问题?任何意见将不胜感激!谢谢。
最佳答案
Chrome 将响应解释为 HTML,因为内容类型不是文本/纯文本。
在 RequestMapping 注释中将 text/plain 设置为生成的内容类型应该可以解决这个问题。
关于java - 如何使用包含换行符和制表符的 ResponseBody 传递详细字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36996704/