2016-08-24 2 views
1

Использование RestDocs версии 1.1.1.RELEASE и SpringBoot 1.4.0.RELEASE, параметры при использовании «httpRequest» документируются дважды.RestDocs выполняет двойную документацию по параметрам запроса

Следующий код:

@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 & сезон = 2016" документирована дважды):

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

Есть кто-нибудь испытывал ничего подобного, или знать, что проблема есть?

ответ

0

Это a bug, что было исправлено в 1.1.2.RELEASE. Модернизация решит проблему. При обновлении убедитесь, что вы получаете 1.1.2 как spring-restdocs-mockmvc, так и spring-restdocs-core. Последний модуль - это место, где исправление.

+0

ОК, Спасибо за ответ. –

+0

Привет, Энди, теперь я обновлен до 1.1.2.RELEASE, и я вижу, что он потянул в правильную версию, но у меня все еще такая же проблема. Есть идеи? –

+0

У вас есть правильная версия основного модуля? Вот где исправить. –

0

Мы получаем "двойная документация", когда мы задаем параметры запроса (см блок ниже) в пустую строку (""):

GET /Thing/OtherThing/Foo/?thinger=FOO&block=&bla=5&block= HTTP/1.1 

Мы используем Spring бутс 1.5.2 и Spring REST Docs 1.1. 2.RELEASE.

Смежные вопросы