1

我有一个简单的项目 Spring boot 项目。它包含一个基于 Jersey 的控制器:@Path("persons") @Produces(MediaType.APPLICATION_JSON) public class PersonsController {

    @GET
    public Person get() {
        return new Person("James", 20);
    }
}

它按预期返回 json 响应(网址:http://localhost:PORT/persons):

{
  "name": "James",
  "age": 20
}

我的目标是为此控制器添加 Spring Cloud Contract 测试。我已经添加了所有必需的 mvn 配置,并测试:

public class MvcTest {
    @Before
    public void setup() {
        RestAssuredMockMvc.standaloneSetup(new PersonsController());
    }
}

这是合同(groovy 文件):import org.springframework.cloud.contract.spec.Contract

Contract.make {
    request {
        method 'GET'
        url('persons')
    }
    response {
        status 200
        body(
                "name": "James",
                "age": 20
        )
    }
}

当我运行时mvn clean package总是返回以下错误:失败的测试:

  ContractVerifierTest.validate_getTest:26 expected:<[200]> but was:<[404]>

我相信这应该与 ServletDispatcher 有关,因为它看不到泽西岛的路径。将@Path 替换为@RequestMapping 的同一个项目可以工作。但是,我需要让它与泽西岛一起工作。我错过了什么吗?

4