Java Rest Controller接收多行String Post请求问题咨询
解决Java Rest Controller无法捕获多行字符串的问题
我来帮你搞定这个问题!你现在遇到的情况,大概率是请求的Content-Type设置不对,或者Spring解析请求体的方式导致只拿到最后一行。咱们一步步来解决:
第一步:优化Controller代码(更简洁可靠)
其实不用HttpEntity<String>,直接用@RequestBody注解绑定请求体字符串会更直观,而且能确保拿到完整的多行内容。修改后的代码如下:
@PostMapping public String postData(@RequestBody String requestBody) { log.info("In RatingController Post Data"); log.info(requestBody); // 现在能打印完整的多行内容了 return "Return"; }
第二步:确保请求端设置正确的Content-Type
这是关键!如果你的请求没有指定Content-Type: text/plain,Spring可能会把请求体当成表单数据来解析,导致换行被过滤或者只保留最后一行。
举几个常见场景的设置方式:
- Postman/ApiFox等工具:选择Body的「Raw」格式,然后在下拉框选「Text」,直接输入多行内容发送即可(工具会自动帮你设置Content-Type为text/plain)。
- Java代码发送(比如RestTemplate):手动设置请求头的Content-Type:
RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.TEXT_PLAIN); // 必须设置这个 String multiLineText = "第一行内容\n第二行内容\n第三行内容"; HttpEntity<String> requestEntity = new HttpEntity<>(multiLineText, headers); String response = restTemplate.postForObject("http://your-controller-url", requestEntity, String.class);
如果你坚持要用HttpEntity
那也要保证请求的Content-Type是text/plain,Spring就能正确把整个请求体注入到HttpEntity的body里,不会丢失换行和多行内容。
试一下上面的方法,应该就能捕获到完整的多行字符串啦!
内容的提问来源于stack exchange,提问作者BrownTownCoder
相关产品推荐
相关产品推荐

