我正在使用Spring Boot尝试Spring HATEOAS。我小心翼翼地写了一个单元测试:
given().standaloneSetup(new GreetingApi())
.accept("application/hal+json;charset=UTF-8")
.when()
.get("/greeting")
.prettyPeek()
.then().statusCode(200)
.body("content", equalTo("Hello, World"))
.body("_links.self.href", endsWith("/greeting?name=World"));
测试返回响应如下:
Content-Type: application/hal+json;charset=UTF-8
{
"content": "Hello, World",
"links": [
{
"rel": "self",
"href": "http://localhost/greeting?name=World"
}
]
}
但实际上,当我运行整个Spring Boot应用程序时,响应会像这样:
HTTP/1.1 200
Content-Type: application/hal+json;charset=UTF-8
Date: Wed, 24 May 2017 15:28:39 GMT
Transfer-Encoding: chunked
{
"_links": {
"self": {
"href": "http://localhost:8080/greeting?name=World"
}
},
"content": "Hello, World"
}
所以必须有一些方法来配置HATEOAS的响应,但是我找不到它。
希望熟悉此事的人可以帮助我。
整个存储库为here。
答案 0 :(得分:4)
问题是因为您使用的是standaloneSetup()
方法。这意味着您以编程方式构建所有Spring MVC,并且您的测试并不了解所有Spring Boot的“魔法”。因此,此测试具有最小的Spring MVC基础结构,它不知道如何使用HATEOAS。
可能的解决方案是使用Spring Boot准备的WebApplicationContext
:
@RunWith(SpringRunner.class)
@SpringBootTest
public class GreetingApiTest {
@Autowired
private WebApplicationContext context;
@Test
public void should_get_a_content_with_self_link() throws Exception {
given()
.webAppContextSetup(context)
.accept("application/hal+json;charset=UTF-8")
.when()
.get("/greeting")
.prettyPeek()
.then()
.statusCode(200)
.body("content", equalTo("Hello, World"))
.body("_links.self.href", endsWith("/greeting?name=World"));
}
}