本文介绍了RestDocs对请求参数进行双重记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用RestDocs 1.1.1.RELEASE版本和SpringBoot 1.4.0.RELEASE版本时,使用"httpRequest"时的参数会记录两次.

Using RestDocs version 1.1.1.RELEASE and SpringBoot 1.4.0.RELEASE, parameters when using "httpRequest" is documented double.

以下代码:

@RunWith(SpringRunner.class)
@WebMvcTest(ProductResource.class)
@AutoConfigureRestDocs("target/generated-snippets")
public class ProductResourceDocumentation {

private static final String PROPERTY_ID_VALUE = "d7612";
private static final String SALES_MARKET_VALUE = "999";
private static final String SEASON_VALUE = "2016";
private static final String SECTIONS_VALUE = "buildings";
private static final String SHOW_DESCRIPTIONS_VALUE = "false";
private static final String STRING = "string";
private static final Integer NUMBER = 1;
private static final String NOT_FOUND = "404 Not Found";
private static final String BAD_REQUEST = "400 Bad Request";

private RestDocumentationResultHandler documentationResultHandler;

@MockBean
private ProductHandler productHandler;

@Autowired
private MockMvc mockMvc;

@Before
public void setup() {
    this.documentationResultHandler = document("{class-name}/{method-name}", preprocessRequest(prettyPrint()), preprocessResponse(prettyPrint()));
}

@Test
public void listProducts() throws Exception {
    Product product = getBasicProductsRepresentation();
    when(productHandler.getProduct(PROPERTY_ID_VALUE, SALES_MARKET_VALUE, SEASON_VALUE, null, null)).thenReturn(product);

    mockMvc.perform(RestDocumentationRequestBuilders.get("/products/{propertyId}", PROPERTY_ID_VALUE)
            .param("salesMarket", SALES_MARKET_VALUE)
            .param("season", SEASON_VALUE))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.propertyID", is(PROPERTY_ID_VALUE)))
            .andExpect(jsonPath("$.season", is(SEASON_VALUE)))
            .andDo(documentationResultHandler.document(
                    pathParameters(
                            parameterWithName("propertyId").description(PATH_PARAM__PROPERTY_ID)
                    ),
                    requestParameters(
                            parameterWithName("salesMarket").description(REQUEST_PARAM__SALES_MARKET),
                            parameterWithName("season").description(REQUEST_PARAM__SEASON)
                    ),
                    httpRequest(), httpResponse()
            ));
}

产生以下文档(两次记录"salesMarket = 999& season = 2016"):

Produces the following documentation ("salesMarket=999&season=2016" is documented twice):

GET /products/d7612?    salesMarket=999&season=2016&salesMarket=999&season=2016 HTTP/1.1

有人经历过类似的经历或知道问题出在什么地方吗?

Have anybody experienced anything similar or know what the problem is?

推荐答案

它是 a bug (已在1.1.2.RELEASE中修复).升级将解决问题.升级时,请确保同时获得spring-restdocs-mockmvcspring-restdocs-core的1.1.2.后一个模块是修复程序所在的地方.

It's a bug that's been fixed in 1.1.2.RELEASE. Upgrading will resolve the problem. When upgrading make sure that you get 1.1.2 of both spring-restdocs-mockmvc and spring-restdocs-core. The latter module is where the fix is.

这篇关于RestDocs对请求参数进行双重记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-14 21:14