Spring Rest Docs #WIP# ====================== https://github.com/spring-boot-tutorials/spring-rest-docs In this article we will configure Spring Rest Docs. Create Initial Code Base ------------------------ - Go to https://start.spring.io/ - Add the following dependencies: - restdocs - spring-boot-starter-web - lombok - Click `Generate` Dependencies ------------ Dependencies used in ``pom.xml`` .. code-block:: xml org.springframework.boot spring-boot-starter-web org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.restdocs spring-restdocs-mockmvc test Controller ---------- Let's create a new file ``src/main/java/com/example/spring_rest_docs/CrudController.java`` .. code-block:: java @RestController @RequestMapping("/crud") public class CrudController { @GetMapping public List read(@RequestBody CrudInput crudInput) { List returnList = new ArrayList(); returnList.add(crudInput); return returnList; } @ResponseStatus(HttpStatus.CREATED) @PostMapping public HttpHeaders save(@RequestBody CrudInput crudInput) { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setLocation(linkTo(CrudController.class).slash(crudInput.getTitle()).toUri()); return httpHeaders; } @DeleteMapping("/{id}") public void delete(@PathVariable("id") long id) { // delete } } Create another controller ``src/main/java/com/example/spring_rest_docs/IndexController.java``: .. code-block:: java @RestController @RequestMapping("/") public class IndexController { static class CustomRepresentationModel extends RepresentationModel { public CustomRepresentationModel(Link initialLink) { super(initialLink); } } @GetMapping public CustomRepresentationModel index() { return new CustomRepresentationModel(linkTo(CrudController.class).withRel("crud")); } } Create Tests ------------ Create a new file ``src/test/java/com/example/spring_rest_docs/ApiDocumentationJUnit5IntegrationTest.java``: .. code-block:: java @ExtendWith({RestDocumentationExtension.class, SpringExtension.class}) @SpringBootTest public class ApiDocumentationJUnit5IntegrationTest { private MockMvc mockMvc; @BeforeEach public void setUp(WebApplicationContext webApplicationContext, RestDocumentationContextProvider restDocumentation) { this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext) .apply(documentationConfiguration(restDocumentation)).build(); } } Run & Verify Tests ------------------ Open terminal at project root and execute the following: .. code-block:: sh mvn clean package