Как документировать сообщения об ошибках с помощью Spring Rest Doc

Я использую документ Spring rest вместе с тестом Spring MVC для создания спокойной документации. Сейчас пытаюсь описать возможные сообщения об ошибках на ресурсе, но не могу найти в документации по весне ничего, что мне поможет.

То, чего я пытаюсь добиться, похоже на раздел об ошибке 4xx в http://apidocjs.com/example/.

Какие-нибудь мысли ?


person Harry    schedule 28.09.2016    source источник
comment
projects.spring.io/spring-restdocs   -  person xenteros    schedule 28.09.2016
comment
Я знаю об этих документах... все равно спасибо...   -  person Harry    schedule 28.09.2016
comment
С точки зрения REST Docs, ответ об ошибке на самом деле ничем не отличается от успешного ответа. Пробовали ли вы сделать вызов MockMvc, выдающий ответ об ошибке, а затем задокументировать его, как обычно?   -  person Andy Wilkinson    schedule 29.09.2016
comment
Привет, Энди, да, я сделал, и это работает как обычные ответы. Но я пытаюсь сделать так, чтобы все ошибки были в таблице. Так же, как в ссылке, которую я дал. На самом деле я сделал это сейчас с новым пользовательским фрагментом, который я вызываю на фиктивном сервисе, когда собираю все протестированные ошибки для ресурса.   -  person Harry    schedule 29.09.2016


Ответы (1)


Просто создайте тест, который намеренно генерирует ответ об ошибке. И задокументируйте поля, как и в любом другом тесте Spring Rest Docs.

@Test
    public void errorExample() throws Exception {
        RestDocumentationResultHandler docs = document("Error Response",
                preprocessRequest(prettyPrint()),
                preprocessResponse(prettyPrint()),
                responseFields(
                        fieldWithPath("status").optional().type("Integer").description("Application status field."),
                        fieldWithPath("errorMsg").type("String").description("A global description of the cause of the error")        

                )
        );


        AppConfig req = getAppConfigReq(null, null, null);

        ResultActions result = this.mockMvc.perform(  post("/SomeAPICall/")
                .contentType(MediaType.APPLICATION_JSON)
                .accept(MediaType.APPLICATION_JSON)
                .content(this.objectMapper.writeValueAsString(req))
        );
        result.andExpect(status().is(401));
        result.andDo(docs);
    }
person BrianC    schedule 29.09.2016
comment
Привет Брайан, спасибо за ответ! Действительно, я могу задокументировать свои пользовательские ошибки как обычные ответы, у меня есть такой интеграционный тест для всех возможных результатов пользовательских ошибок. У меня будет много фрагментов для включения, и информация не будет сжатой. Чего я пытаюсь добиться, так это того, чтобы они были в таблице для каждого ресурса. Вот пример того, что я сделал до сих пор: › ссылка Я сделал это с немного взлома, как упоминалось в комментариях, и мне интересно, есть ли более естественный способ сделать это, поскольку во многих документах REST API есть такая документация об ошибках. - person Harry; 30.09.2016
comment
Я не уверен, что понимаю то, о чем спрашивают, но похоже, что вы хотите создать один глобальный фрагмент ошибки и отображать его при каждом из ваших вызовов? Это противоречит намерениям Энди Вилкерсона использовать Spring Rest Docs, но это можно сделать. Если это так, то все, что вам нужно сделать после того, как вы создали общий фрагмент кода ошибки, — это включить его в каждый раздел. Таким образом, у вас будет строка вроде include::{snippets}/Errors Object/response-fields.adoc[] в каждом разделе, указывающая на ваш один сгенерированный фрагмент ошибки. - person BrianC; 30.09.2016
comment
Да, это то, что я хочу, и я сделал это, как вы описали. Действительно, кажется, что это противоречит способу документирования Spring's Rest Docs. Спасибо за ответы и внимание. - person Harry; 30.09.2016