Postman文本响应出现unexpected-token错误,求排查Spring Controller配置
排查Postman "unexpected-token error" 与Spring Controller的问题
咱们来拆解下你调用Spring Controller接口时在Postman里遇到的「unexpected-token error」问题,核心原因和解决方法如下:
错误根源
这个报错本质是接口声明的响应格式和实际返回内容不匹配:
- 你的Controller通过
produces = MediaType.APPLICATION_JSON_VALUE告诉客户端「我返回的是JSON格式」,但方法返回的是ResponseEntity<String>——如果直接返回普通字符串(比如return ResponseEntity.ok("张三的设置")),Spring会直接输出裸字符串,而不是符合JSON规范的格式(JSON要求字符串必须用双引号包裹,或者是对象/数组结构)。Postman接收到这个裸字符串后,会按照你声明的JSON规则去解析,自然就会抛出「unexpected token」的语法错误。
另外你Swagger注解里的responseContainer = ""设置为空,虽然不会直接触发这个错误,但可能会让Swagger文档的响应类型说明混乱,建议一并修正。
解决方法
方法1:让返回的字符串符合JSON规范
如果确实需要返回字符串内容,确保输出的是合法的JSON字符串,有两种简单实现方式:
// 方式一:手动给字符串套双引号 return ResponseEntity.ok("\"" + benutzereinstellungenContent + "\""); // 方式二:用Jackson自动序列化(更稳妥,避免特殊字符问题) ObjectMapper mapper = new ObjectMapper(); return ResponseEntity.ok(mapper.writeValueAsString(benutzereinstellungenContent));
这样返回的内容会是类似"张三的设置"的合法JSON字符串,Postman就能正常解析了。
方法2:修改接口的响应类型为纯文本
如果你的接口本来就应该返回纯文本而非JSON,直接修改produces属性即可:
@RequestMapping( method = RequestMethod.GET, value = "/{name}", produces = MediaType.TEXT_PLAIN_VALUE // 改为纯文本类型 ) public ResponseEntity<String> getBenutzereinstellungenByName(...) { // 正常返回字符串即可 return ResponseEntity.ok("张三的设置"); }
此时Postman会收到text/plain类型的响应,会按照纯文本解析,不会触发JSON语法错误。
方法3:返回结构化JSON对象(推荐)
如果业务允许,最好返回结构化的JSON对象,这更符合REST接口的规范,也能从根源避免格式问题:
// 先定义一个简单的DTO类,用来封装响应内容 public class BenutzereinstellungenResponse { private String content; // 构造器、Getter public BenutzereinstellungenResponse(String content) { this.content = content; } public String getContent() { return content; } } // 修改Controller方法的返回类型 @RequestMapping( method = RequestMethod.GET, value = "/{name}", produces = MediaType.APPLICATION_JSON_VALUE ) public ResponseEntity<BenutzereinstellungenResponse> getBenutzereinstellungenByName(...) { String content = "张三的设置"; return ResponseEntity.ok(new BenutzereinstellungenResponse(content)); }
这样返回的是{"content":"张三的设置"}的合法JSON对象,Postman能完美解析,同时Swagger文档也能清晰展示响应结构。
补充:修正Swagger注解
你的@ApiOperation中responseContainer = ""设置为空,建议根据实际返回类型调整:
- 如果返回JSON字符串,直接去掉
responseContainer即可; - 如果返回自定义DTO对象,设置
response = BenutzereinstellungenResponse.class。
示例:
@ApiOperation(value = "根据名称获取用户设置", response = BenutzereinstellungenResponse.class)
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

