调用API后如何返回未格式化原始字符串(非JSON/XML格式)
解决API返回原始未格式化字符串的方案
不管是REST还是SOAP框架,通常都会自动帮你把响应序列化并格式化为JSON或XML,但如果要对接遗留模型、需要原样传输复杂响应的话,咱们可以通过以下方式跳过自动格式化,直接返回原始字符串:
1. REST API场景(以Spring Boot为例)
Spring Boot这类框架默认会用Jackson把返回值转成JSON,要返回原始字符串的话:
- 直接把接口方法的返回类型设为
String,如果你的类加了@RestController注解,直接返回字符串就会原样输出,不需要额外加序列化注解 - 要是需要更明确地控制响应类型,可以手动构建
ResponseEntity,指定内容类型为text/plain,彻底避免框架的自动格式化:
@GetMapping("/legacy-data") public ResponseEntity<String> fetchLegacyResponse() { String rawResponse = callLegacyModel(); // 调用遗留模型拿到原始字符串 return ResponseEntity.ok() .contentType(MediaType.TEXT_PLAIN) .body(rawResponse); }
2. SOAP API场景(以JAX-WS为例)
SOAP服务默认会把返回对象序列化为标准XML,要返回原始XML字符串的话:
- 把服务方法的返回类型改成
javax.xml.transform.Source,直接传入原始XML的流对象,这样JAX-WS会直接传输原始内容,不会做额外处理:
@WebMethod public Source getLegacySoapData() { String rawXml = callLegacySoapModel(); // 获取遗留模型返回的原始XML字符串 return new StreamSource(new StringReader(rawXml)); }
- 也可以直接操作响应输出流,把原始字符串写入流中,完全绕开框架的序列化逻辑。
关键注意点
- 提前和接口调用方沟通好,因为默认情况下REST客户端可能期望JSON、SOAP客户端期望标准XML结构,确保对方能处理原始字符串响应
- 绝对不要对遗留模型返回的字符串做任何转义、格式化操作,比如别用
ObjectMapper去序列化它,直接返回就行 - 如果原始内容包含特殊字符(比如XML里的
<、>),直接返回字符串能保证这些字符完全保留,不会被框架自动转义
内容的提问来源于stack exchange,提问作者Cedric
相关产品推荐
相关产品推荐

