You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot在IntelliJ与终端运行时响应体格式不一致问题

问题描述

我开发了一个带有@PostMapping的Spring Boot应用,接口返回的文本内容包含一个表格——该表格由应用内执行命令后拼接行生成。目前遇到的问题是:

  • 通过java -jar app.jar在终端运行应用时,接口返回的表格格式显示异常(附异常格式截图)
  • 在IntelliJ中直接运行应用时,接口返回的表格格式显示正常(附正常格式截图)

核心代码片段如下:

@PostMapping("/newman")
public ResponseEntity<String> triggerNewmanTests(@Valid @RequestBody NewmanRequesBody requestBody) throws NewmanException {
    String uuidRequest = UUID.randomUUID().toString();
    File directory = directoryService.createDirectory(requestBody.getLinkRepo(), uuidRequest);
    logger.info("Directory created under "+directory.getAbsolutePath());
    try {
        gitService.cloneRepo(requestBody.getLinkRepo(), directory);
        logger.info("Directory cloned under "+directory.getAbsolutePath());
        StringBuilder newmanStringBuilder = newmanService.triggerNewman(
                requestBody.getLinkRepo(),
                requestBody.getEnvironment(),
                uuidRequest
        );
        logger.info(newmanStringBuilder.toString());
        HttpHeaders responseHeaders = new HttpHeaders();
        responseHeaders.add("Content-Type", "text/plain; charset=UTF-8");
        return new ResponseEntity<>(newmanStringBuilder.toString(),responseHeaders, HttpStatus.OK);
    // 原代码省略异常处理逻辑
}

补充信息:终端中logger.info(newmanStringBuilder.toString())打印的表格格式完全正常,推测问题出在请求传输环节,可能是IntelliJ运行时自动添加了某些处理,导致格式表现不同。


问题分析与解决办法

核心原因

终端运行和IntelliJ运行的差异,大概率是换行符处理不一致:

  • 命令行环境下,应用输出的换行符可能是\n,但部分HTTP客户端或终端显示时未正确识别;而IntelliJ的内置环境会自动适配换行符(比如将\n转为系统对应的\r\n或保留\n并正确渲染)。
  • 另外,若终端使用非等宽字体,也会导致表格对齐混乱,但从logger.info打印正常来看,核心问题还是传输时的换行/空白字符未被正确保留。

具体解决步骤

  1. 统一换行符格式:在返回响应前,将字符串中的换行符统一转为\r\n(兼容多数HTTP客户端和终端):
String formattedContent = newmanStringBuilder.toString().replace("\n", "\r\n");
return new ResponseEntity<>(formattedContent, responseHeaders, HttpStatus.OK);
  1. 优化响应头设置:使用更稳妥的方式设置Content-Type,避免客户端误识别为HTML(HTML会自动压缩空格和换行):
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.TEXT_PLAIN);
responseHeaders.setCharset(StandardCharsets.UTF_8);
  1. 检查终端显示配置:如果是终端本身的问题,确认终端使用等宽字体(如Consolas、Monaco),并开启自动换行功能,确保表格能正确对齐。

内容的提问来源于stack exchange,提问作者Cosmin Oprea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:35:27