java - 如何使用包含换行符和制表符的 ResponseBody 传递详细字符串

标签 java http spring-mvc string-formatting

作为 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/

相关文章:

java - OpenJDK 1.8.0_242,MaxRAMFraction 设置未反射(reflect)

java - 如何从 Java 中的二维数组中删除特定行和特定列?

http - 如何发布Facebook成绩?

.htaccess - 需要选择性 HTTPS 到 HTTP 重定向 .htaccess 代码

java - spring security 从数据库中获取用户 ID

java - 带有 Spring Webflow 2.3.1 组件的 JSF 2.2 未呈现

java - 用于将多个请求参数转换为对象的 Spring 转换器或属性编辑器?

java - 如何使用java代码处理文件保存提示

java - 具有可变维度的参数

javascript - Express 在 6 次请求后不再接受邮寄请求