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

Spring Cloud Contract测试报错:预期200实际返回404求助

问题诊断与修复

你的测试返回404而非预期200的核心原因是Controller的@RequestMapping中headers参数配置错误,导致Contract生成的请求无法匹配到对应的接口方法。

具体问题分析

看你的ServerDefaultController映射配置:

@RequestMapping(value = controllerPath, headers={"application/json"})

这里的headers={"application/json"}写法不符合Spring MVC的规则——headers参数需要以"HeaderName=HeaderValue"的格式,用来匹配请求中指定Header的对应值。而你直接写"application/json",意味着只有当请求中存在一个名为application/json的Header(不管值是什么)时,才会匹配这个Controller方法。

但你的Contract定义的请求是设置Content-Type为application/json:

headers {
    contentType(applicationJson())
}

这会生成包含Content-Type: application/json的请求,而非一个名为application/json的Header,所以请求无法匹配到Controller方法,自然返回404。

修复方案

修改ServerDefaultController的@RequestMapping配置,改成正确的格式:

方式1:使用headers参数明确匹配Content-Type

import org.springframework.http.MediaType;

@RequestMapping(value = controllerPath, headers = "Content-Type=" + MediaType.APPLICATION_JSON_VALUE)

方式2:使用consumes参数(推荐,语义更清晰)

import org.springframework.http.MediaType;

@RequestMapping(value = controllerPath, consumes = MediaType.APPLICATION_JSON_VALUE)

额外验证确认

  1. 你的ContractdemoserverBase中setup方法已经正确用RestAssuredMockMvc.standaloneSetup(new ServerDefaultController())初始化了Controller,且你已确认该方法被调用,这部分无问题。
  2. Contract中定义的url '/test'与Controller的controllerPath完全一致,路径匹配无问题。

修改后重新运行测试,应该就能得到预期的200状态码了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:59:20