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

Spring Boot接口Postman无验证错误响应仅显400,终端curl正常

问题描述

搭建了一个对RequestBody做参数校验的API,当跳过必填字段调用接口时:

  • Postman仅显示400 Bad Request,响应体为空;但点击保存响应后,能看到JSON格式的错误信息
  • 复制Postman生成的curl命令在终端执行,可正常查看校验错误响应

自定义异常处理器代码如下:

@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
                                                              HttpHeaders headers,
                                                              HttpStatus status, WebRequest request) {

    Map<String, Object> body = new LinkedHashMap<>();
    body.put("timestamp", new Date());
    body.put("status", status.value());

    //Get all errors
    List<String> errors = ex.getBindingResult()
            .getFieldErrors()
            .stream()
            .map(x -> x.getDefaultMessage())
            .collect(Collectors.toList());

    body.put("errors", errors);
    return new ResponseEntity<>(body, headers, status);

}
可能原因及解决方案

1. 响应头缺少明确的Content-Type标识

Postman依赖响应头的Content-Type识别响应格式,若未明确设置为application/json,Postman可能无法正确渲染响应体,导致界面显示为空,但实际响应内容已正常返回。

解决办法:在异常处理器中添加Content-Type设置:

@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
                                                              HttpHeaders headers,
                                                              HttpStatus status, WebRequest request) {

    // 明确指定响应为JSON格式
    headers.setContentType(MediaType.APPLICATION_JSON);

    Map<String, Object> body = new LinkedHashMap<>();
    body.put("timestamp", new Date());
    body.put("status", status.value());

    List<String> errors = ex.getBindingResult()
            .getFieldErrors()
            .stream()
            .map(x -> x.getDefaultMessage())
            .collect(Collectors.toList());

    body.put("errors", errors);
    return new ResponseEntity<>(body, headers, status);

}

2. Postman预览模式隐藏响应内容

Postman默认预览模式可能对4xx错误响应做了特殊处理,不展示响应体内容。

解决办法:在Postman响应区域切换到Raw标签页,直接查看原始响应内容,此时能看到完整的JSON错误信息。

3. Postman缓存或设置异常

Postman本地缓存或偏好设置异常可能导致响应解析失败。

解决办法:

  • 关闭并重启Postman,清除当前请求缓存
  • 重置Postman偏好设置(设置 -> 重置为默认)
  • 关闭“Automatically follow redirects”选项(若开启)

4. 验证响应头一致性

用curl -v命令执行请求,查看完整响应头,对比Postman中显示的响应头,确认Content-Type、Content-Length等字段是否正确返回。

总结

核心问题是Postman对响应的渲染逻辑或识别问题,API本身已正确返回错误响应。通过明确设置响应头Content-Type,或切换Postman响应查看模式,即可解决界面不显示响应体的问题。

内容的提问来源于stack exchange,提问作者Manish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:37:37