如何使用包含换行符和制表符的 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 设置为生成的内容类型应该可以解决问题。