java - 如何使用mockMvc在响应正文中格式化Spring REST文档

标签 java spring spring-mvc-test spring-restdocs

我使用 Spring REST Docs 编写 API 文档。

代码示例:

@Override
public void getById(String urlTemplate, PathParametersSnippet pathParametersSnippet, Object... urlVariables) throws Exception {
    resultActions = mockMvc.perform(get(urlTemplate, urlVariables)
            .principal(principal)
            .contentType(APPLICATION_JSON))
            .andExpect(status().isOk())
            .andDo(print());

    // do..
}

但问题是测试的结果是一行回答的。并且理解返回数据的结构是非常困难的。

响应示例:

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = {Content-Type=[application/json;charset=UTF-8]}
     Content type = application/json;charset=UTF-8
             Body = {"creator":null,"modifier":null,"modificationTime":null,"creationTime":null,"id":100,"deleted":false,"name":"Name","description":null,"report":[{"creator":"System","modifier":"System","modificationTime":"2019-01-30T14:21:50","creationTime":"2019-01-30T14:21:50","id":1,"name":"Form name","reportType":{"creator":"System","modifier":"System","modificationTime":"2019-01-30T14:21:50","creationTime":"2019-01-30T14:21:50","id":1,"deleted":false,"name":"Raport"},"unmodifiable":true}]}
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

此外,我根据收到的答案生成文档,并且在文档中还生成未格式化的 JSON

我做错了什么?如何启用 json 格式?

最佳答案

如果您无法配置应用程序以生成打印精美的响应,则可以让 REST 文档在记录它们之前为您完成此操作。 Customizing Requests and Responses 中对此进行了描述。文档部分:

Preprocessing is configured by calling document with an OperationRequestPreprocessor, and/or an OperationResponsePreprocessor. Instances can be obtained using the static preprocessRequest and preprocessResponse methods on Preprocessors. For example:

this.mockMvc.perform(get("/")).andExpect(status().isOk())
    .andDo(document("index", preprocessRequest(removeHeaders("Foo")), 
            preprocessResponse(prettyPrint()))); 

在上述情况下,正在对请求进行预处理以删除 Foo header ,并且正在对响应进行预处理以使其显示 pretty-print 内容。

关于java - 如何使用mockMvc在响应正文中格式化Spring REST文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54442972/

相关文章:

java - spring在哪里寻找带有@Value注释的值

java - Spring Cloud 配置: define server config properties programmatically

spring-mvc - Spring MVC Controller 的集成测试

java - spring boot Controller 测试,mockMov 不模拟

java - 如何在 spring mvc Controller 中 junit 方法的返回类型

java - 具有不同名称的相同 XmlElement

java - 如何在控制台中使用 Java 创建键绑定(bind)?

java - 识别列表中已存在于数据库中的项目并将其删除

Java:以 iOS/Android/Angular 作为客户端进行身份验证和授权

java - 为什么构造函数在 Java 中通过引用传递?