
当 Spring Boot 接口需直接返回已手动拼接的 JSON 字符串(如 "{\"type\":\"\",\"List1\":[]}")时,必须显式设置响应 Content-Type 为 application/json,否则浏览器会将其识别为纯文本;推荐使用 ResponseEntity 精确控制响应头与媒体类型。
当 spring boot 接口需直接返回已手动拼接的 json 字符串(如 `"{\"type\":\"\",\"list1\":[]}"`)时,必须显式设置响应 content-type 为 `application/json`,否则浏览器会将其识别为纯文本;推荐使用 `responseentity` 精确控制响应头与媒体类型。
在 Spring Boot 中,若方法直接返回 String 类型且内容已是合法 JSON 字符串(例如通过 Jackson 手动序列化或字符串拼接生成),仅添加 @ResponseBody 或设置 produces = "text/plain" 是不够的——前者依赖返回值类型推断 MediaType(对 String 默认为 text/plain),后者则强制错误类型,导致浏览器(如 Firefox)不执行 JSON 解析,而是以纯文本显示。
✅ 正确做法是:使用 ResponseEntity<string></string> 封装响应,并显式指定 Content-Type: application/json。这样可绕过 Spring 的内容协商机制,确保响应头准确无误:
@GetMapping(value = "/v1/Count", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<string> getCount(@RequestParam String param) {
String rawJson = "{\"type\":\"summary\",\"List1\":[]}";
return ResponseEntity.ok()
.contentType(MediaType.APPLICATION_JSON)
.body(rawJson);
}</string>
⚠️ 注意事项:
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
-
produces = MediaType.APPLICATION_JSON_VALUE(即"application/json")应与contentType()保持一致,双重保障更稳妥; -
避免手动拼接 JSON 字符串:易引发格式错误(如未转义引号、缺失逗号)。如非必要,优先使用 POJO +
@RestController让 Spring 自动序列化; - 若必须使用原始字符串,请确保其符合 JSON 语法规范(推荐用在线工具校验),并注意 Java 字符串中的反斜杠转义(如
"{\"key\":\"value\"}"); - 不要依赖
@ResponseBody+String返回值自动识别 JSON——Spring 对String的默认HttpMessageConverter是StringHttpMessageConverter,它始终输出text/plain,无法被覆盖。
总结:对于已格式化的 JSON 字符串,ResponseEntity 是最可靠、语义最清晰的解决方案;它既保证了响应体内容原样输出,又赋予开发者对 HTTP 状态码、响应头的完全控制权,是 Spring Web 中处理“非标准序列化场景”的最佳实践。










