如何使用包含换行符和制表符的 ResponseBody 传递详细字符串
How to pass a verbose String using ResponseBody including newline character and tab character
作为 Spring 应用程序的一部分,我正在发回一个很长的字符串作为 Http 响应主体,并且响应字符串包含访问日志行,其中每一行都应该有一个制表符(\t ) 以及换行符 (\n).
每一行都被制作成:
String.format("%s\t%s\n", accessLog.getIpAddress(), accessLog.getDate())
通过 Charles 代理测试 API,两个特殊字符都显示良好。但是,使用 Chrome 浏览器进行相同的测试,由于某种原因,\t 和 \n 都被替换为 space。
此外,我正在使用 Spring @ResponseBody
注释发送这行访问日志。这有什么问题吗?
下面是Controller.java:
@RequestMapping("/get_access_log.do")
@ResponseBody
public String test() throws Exception {
return result = accessLogBO.extractTest();
}
AccessLogBO.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,因为内容类型不是 text/plain。
在 RequestMapping 注释中将 text/plain 设置为生成的内容类型应该可以解决问题。
作为 Spring 应用程序的一部分,我正在发回一个很长的字符串作为 Http 响应主体,并且响应字符串包含访问日志行,其中每一行都应该有一个制表符(\t ) 以及换行符 (\n).
每一行都被制作成:
String.format("%s\t%s\n", accessLog.getIpAddress(), accessLog.getDate())
通过 Charles 代理测试 API,两个特殊字符都显示良好。但是,使用 Chrome 浏览器进行相同的测试,由于某种原因,\t 和 \n 都被替换为 space。
此外,我正在使用 Spring @ResponseBody
注释发送这行访问日志。这有什么问题吗?
下面是Controller.java:
@RequestMapping("/get_access_log.do")
@ResponseBody
public String test() throws Exception {
return result = accessLogBO.extractTest();
}
AccessLogBO.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,因为内容类型不是 text/plain。
在 RequestMapping 注释中将 text/plain 设置为生成的内容类型应该可以解决问题。