Intellij Idea Sping Boot 响应体在Intellij与Terminal中运行时不同

f4t66c6m  于 2024-01-05  发布在  其他
关注(0)|答案(1)|浏览(118)

我有一个简单的spring Boot 应用程序,它带有一个PostMapping。我在最后返回一个包含一个表的文本,基本上这个表是在我在spring Boot 应用程序中运行命令后通过追加行创建的。下面是一个格式不好的ss。我的问题是,当使用(java -jar app.jar)x1c 0d1x在终端中运行应用程序时,这个表的格式不正确
下面是从Intellij运行时的好表:

这是它用来返回文本的代码。

  1. @PostMapping("/newman")
  2. public ResponseEntity<String> triggerNewmanTests(@Valid @RequestBody NewmanRequesBody requestBody) throws NewmanException {
  3. String uuidRequest = UUID.randomUUID().toString();
  4. File directory = directoryService.createDirectory(requestBody.getLinkRepo(), uuidRequest);
  5. logger.info("Directory created under "+directory.getAbsolutePath());
  6. try {
  7. gitService.cloneRepo(requestBody.getLinkRepo(), directory);
  8. logger.info("Directory cloned under "+directory.getAbsolutePath());
  9. StringBuilder newmanStringBuilder = newmanService.triggerNewman(
  10. requestBody.getLinkRepo(),
  11. requestBody.getEnvironment(),
  12. uuidRequest
  13. );
  14. logger.info(newmanStringBuilder.toString());
  15. HttpHeaders responseHeaders = new HttpHeaders();
  16. responseHeaders.add("Content-Type", "text/plain; charset=UTF-8");
  17. return new ResponseEntity<>(newmanStringBuilder.toString(),responseHeaders, HttpStatus.OK);

字符串
我不得不提的是,log(logger.info(newmanStringBuilder.toString());)在终端中也能很好地打印文本,所以基本上请求会发生一些事情,在Intellij中的传输中可能会添加一些东西。

ecfsfe2w

ecfsfe2w1#

解决了这个问题!基本上我运行的命令,newman run collection返回了一个终端x1c 0d1x可以理解的颜色响应
因此,Java在响应中添加了颜色代码,实际上它被打印出来了。不知何故,Intellij从响应中删除了这些颜色代码(我不知道如何,我找不到关于Intellij如何实际运行代码的文档)
修复程序如下所示:

  1. @PostMapping("/newman")
  2. public ResponseEntity<String> triggerNewmanTests(@Valid @RequestBody NewmanRequesBody requestBody) throws NewmanException {
  3. String uuidRequest = UUID.randomUUID().toString();
  4. File directory = directoryService.createDirectory(requestBody.getLinkRepo(), uuidRequest);
  5. logger.info("Directory created under "+directory.getAbsolutePath());
  6. try {
  7. gitService.cloneRepo(requestBody.getLinkRepo(), directory);
  8. logger.info("Directory cloned under "+directory.getAbsolutePath());
  9. StringBuilder newmanStringBuilder = newmanService.triggerNewman(
  10. requestBody.getLinkRepo(),
  11. requestBody.getEnvironment(),
  12. uuidRequest
  13. );
  14. logger.info(newmanStringBuilder.toString());
  15. HttpHeaders responseHeaders = new HttpHeaders();
  16. responseHeaders.add("Content-Type", "text/plain; charset=UTF-8");
  17. // This is the fix !
  18. final String msgWithoutColorCodes =
  19. newmanStringBuilder.toString().replaceAll("\u001B\\[[;\\d]*m", "");
  20. return new ResponseEntity<>(msgWithoutColorCodes,responseHeaders, HttpStatus.OK);

字符串
在修复这个问题后,java -jar app.jar运行流畅,我在响应中得到了好的字符。
但是在我的上下文中,我在一个docker容器中运行这个jar,这又一次破坏了我的响应。
要解决这个问题,你必须在你的docker容器中添加locale,在我的例子中,添加这个解决了这个问题:

  1. RUN apt-get -y install locales
  2. # Set the locale
  3. RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \
  4. locale-gen
  5. ENV LANG en_US.UTF-8
  6. ENV LANGUAGE en_US:en
  7. ENV LC_ALL en_US.UTF-8

展开查看全部

相关问题