【问题标题】:How keep line breaks in Request Body which is send to Spring Boot rest controller如何在发送到 Spring Boot 休息控制器的请求正文中保持换行符
【发布时间】:2019-09-03 00:36:43
【问题描述】:

我很困惑。

我正在通过 Http Post 请求向 Spring Boot 休息控制器发送一个字符串。

字符串包含由'\n'表示的换行符。

控制器使用“纯文本”。

客户端是一个python程序,它从一个从文本文件中读取的json对象中的字段中读取字符串。

文本文件中的 json 对象如下所示: {"content": "多行\n行\n字符串"}

但是,如果换行符到达 '\\n' 其余控制器,它们将被转义,以便它们将正常显示为字符串的一部分 '\n'。

我试图从 python 发送一个不是从文本文件中读取的字符串。相反,我直接在带有换行符的变量中提供字符串:

payload = "new \n line \n string"
headers = {'content-type': 'text/plain'}

r = requests.post(url, data=payload, headers=headers)

但是 '\n' 被转义为 '\\n' 这使它成为字符串的正常部分,显示为 "new \n line \n string" 而不是 “新的 线 字符串”。

但如果我像这样通过 Postman 发送字符串,则新行在到达控制器的字符串中被正确解释为 '\r\n'(设置了文本/纯标题):

所以我的具体问题是,如何将我从 python 的 json 字段读取的字符串发送到其余控制器,以便 java/spring-boot 不会转义 '\n' 字符,而是将其解释为新行特点。 有没有办法从 python 正确发送字符串(首选方式),还是让我在 spring 服务器端进行一些转换/编码?

如果我必须在 Spring 服务器端进行转换/编码,如何确保如果我使用我的 python 客户端发布到我无法控制的服务器,是否会正确解释换行符? 是否有任何标准或依赖于服务器端自定义转换/编码的标准?

控制器如下所示:

@RestController
class SmoeController {

    @PostMapping("/some-endpoint",  consumes = "text/plain", produces = 
                 "text/plain")
    String newEmployee(@RequestBody String text) {
        System.out.println(text);
        return text;
    }

【问题讨论】:

    标签: python spring-boot http post line-breaks


    【解决方案1】:

    试试这个 String[] lines = payload.split("\r\n");

    【讨论】:

      猜你喜欢
      • 2019-02-24
      • 2018-11-28
      • 2019-02-01
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      相关资源
      最近更新 更多