You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:27:50