Spring 与泽西岛的云合同
Spring Cloud Contract with Jersey
我有一个简单的项目Spring 引导项目。它包含一个基于 Jersey 的控制器:
@Path("persons")
@Produces(MediaType.APPLICATION_JSON)
public class PersonsController {
@GET
public Person get() {
return new Person("James", 20);
}
}
它 returns json 响应符合预期 (url: http://localhost:PORT/persons):
{
"name": "James",
"age": 20
}
我的目标是为此控制器添加 Spring 云合同测试。我已经添加了所有必需的 mvn 配置,并测试:
public class MvcTest {
@Before
public void setup() {
RestAssuredMockMvc.standaloneSetup(new PersonsController());
}
}
这是合同(groovy 文件):
导入 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 有关,因为它看不到 Jersey 的路径。将 @Path 替换为 @RequestMapping 的同一项目有效。但是,我需要让它与 Jersey 一起工作。
我错过了什么吗?
您是否检查过有关 jaxrs 支持的部分? https://cloud.spring.io/spring-cloud-contract/1.0.x/spring-cloud-contract.html#_jax_rs_support. Here you have an example how you can use it https://github.com/spring-cloud/spring-cloud-contract/tree/1.0.x/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject
我有一个简单的项目Spring 引导项目。它包含一个基于 Jersey 的控制器: @Path("persons") @Produces(MediaType.APPLICATION_JSON) public class PersonsController {
@GET
public Person get() {
return new Person("James", 20);
}
}
它 returns json 响应符合预期 (url: http://localhost:PORT/persons):
{
"name": "James",
"age": 20
}
我的目标是为此控制器添加 Spring 云合同测试。我已经添加了所有必需的 mvn 配置,并测试:
public class MvcTest {
@Before
public void setup() {
RestAssuredMockMvc.standaloneSetup(new PersonsController());
}
}
这是合同(groovy 文件): 导入 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 有关,因为它看不到 Jersey 的路径。将 @Path 替换为 @RequestMapping 的同一项目有效。但是,我需要让它与 Jersey 一起工作。 我错过了什么吗?
您是否检查过有关 jaxrs 支持的部分? https://cloud.spring.io/spring-cloud-contract/1.0.x/spring-cloud-contract.html#_jax_rs_support. Here you have an example how you can use it https://github.com/spring-cloud/spring-cloud-contract/tree/1.0.x/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject