如何使用ResponseBody传递详细字符串,包括换行符和制表符

时间:2016-05-03 06:00:33

标签: java http spring-mvc string-formatting

我发送一个非常长的String作为Http响应体作为Spring应用程序的一部分,响应String包含访问日志行,其中每行应该有一个制表符(\ 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();
}

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

任何人都可以帮我解决这个问题吗?任何评论都会非常感激!谢谢。

1 个答案:

答案 0 :(得分:0)

Chrome将响应解释为HTML,因为内容类型不是text / plain。

在RequestMapping注释中将text / plain设置为生成的内容类型应解决问题。