Merge branch '1.0.x' into 1.1.x
This commit is contained in:
@@ -42,5 +42,5 @@ with regard to the reporter of an incident.
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][1], version 1.3.0, available
|
||||
at [contributor-covenant.org/version/1/3/0/][2].
|
||||
|
||||
[1]: http://contributor-covenant.org
|
||||
[2]: http://contributor-covenant.org/version/1/3/0/
|
||||
[1]: https://contributor-covenant.org
|
||||
[2]: https://contributor-covenant.org/version/1/3/0/
|
||||
@@ -61,4 +61,4 @@ The project can then be imported into Eclipse using `File -> Import…` and then
|
||||
|
||||
[1]: CODE_OF_CONDUCT.md
|
||||
[2]: https://cla.pivotal.io/sign/spring
|
||||
[3]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
|
||||
[3]: https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
|
||||
|
||||
@@ -9,7 +9,7 @@ for your RESTful services. However, we can't achieve that goal without your cont
|
||||
[[contributing-questions]]
|
||||
=== Questions
|
||||
|
||||
You can ask questions about Spring REST Docs on http://stackoverflow.com[StackOverflow]
|
||||
You can ask questions about Spring REST Docs on https://stackoverflow.com[StackOverflow]
|
||||
using the `spring-restdocs` tag. Similarly, we encourage you to help your fellow
|
||||
Spring REST Docs users by answering questions.
|
||||
|
||||
|
||||
@@ -765,7 +765,7 @@ A number of snippets are produced automatically when you document a request and
|
||||
|Snippet | Description
|
||||
|
||||
| `curl-request.adoc`
|
||||
| Contains the http://curl.haxx.se[`curl`] command that is equivalent to the `MockMvc`
|
||||
| Contains the https://curl.haxx.se[`curl`] command that is equivalent to the `MockMvc`
|
||||
call that is being documented
|
||||
|
||||
| `httpie-request.adoc`
|
||||
|
||||
@@ -430,7 +430,7 @@ the resulting HTML files depends on whether you are using Maven or Gradle:
|
||||
|
||||
The generated snippets can then be included in the manually created Asciidoctor file from
|
||||
above using the
|
||||
http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#include-files[include macro].
|
||||
https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#include-files[include macro].
|
||||
The `snippets` attribute specified in the <<getting-started-build-configuration, build
|
||||
configuration>> can be used to reference the snippets output directory. For example:
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ Andy Wilkinson
|
||||
:source: {github}/tree/{branch-or-tag}
|
||||
:samples: {source}/samples
|
||||
:templates: {source}spring-restdocs/src/main/resources/org/springframework/restdocs/templates
|
||||
:spring-boot-docs: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle
|
||||
:spring-framework-docs: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle
|
||||
:spring-boot-docs: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle
|
||||
:spring-framework-docs: https://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle
|
||||
|
||||
[[abstract]]
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ services that is accurate and readable.
|
||||
|
||||
Writing high-quality documentation is difficult. One way to ease that difficulty is to use
|
||||
tools that are well-suited to the job. To this end, Spring REST Docs uses
|
||||
http://asciidoctor.org[Asciidoctor] by default. Asciidoctor processes plain text and
|
||||
https://asciidoctor.org[Asciidoctor] by default. Asciidoctor processes plain text and
|
||||
produces HTML, styled and layed out to suit your needs. If you prefer, Spring REST Docs
|
||||
can also be configured to use Markdown.
|
||||
|
||||
|
||||
@@ -9,15 +9,15 @@ relevant to Spring REST Docs.
|
||||
[[working-with-asciidoctor-resources]]
|
||||
=== Resources
|
||||
|
||||
* http://asciidoctor.org/docs/asciidoc-syntax-quick-reference[Syntax quick reference]
|
||||
* http://asciidoctor.org/docs/user-manual[User manual]
|
||||
* https://asciidoctor.org/docs/asciidoc-syntax-quick-reference[Syntax quick reference]
|
||||
* https://asciidoctor.org/docs/user-manual[User manual]
|
||||
|
||||
|
||||
|
||||
[[working-with-asciidoctor-including-snippets]]
|
||||
=== Including snippets
|
||||
|
||||
The http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#include-files[include
|
||||
The https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#include-files[include
|
||||
macro] is used to include generated snippets in your documentation. The `snippets`
|
||||
attribute specified in the <<getting-started-build-configuration, build configuration>>
|
||||
can be used to reference the snippets output directory, for example:
|
||||
@@ -42,7 +42,7 @@ snippet is included or by using a custom snippet template.
|
||||
==== Formatting columns
|
||||
|
||||
Asciidoctor has rich support for
|
||||
http://asciidoctor.org/docs/user-manual/#cols-format[formatting a table's columns]. For
|
||||
https://asciidoctor.org/docs/user-manual/#cols-format[formatting a table's columns]. For
|
||||
example, the widths of a table's columns can be specified using the `cols` attribute:
|
||||
|
||||
[source,indent=0]
|
||||
@@ -89,5 +89,5 @@ in a cell that contains the value of a `description` attribute:
|
||||
|
||||
==== Further reading
|
||||
|
||||
Refer to the http://asciidoctor.org/docs/user-manual/#tables[Tables section of
|
||||
Refer to the https://asciidoctor.org/docs/user-manual/#tables[Tables section of
|
||||
the Asciidoctor user manual] for more information about customizing tables.
|
||||
@@ -20,7 +20,7 @@ to describe the relationships between resources and to allow navigation between
|
||||
|
||||
[getting-started-running-the-service]
|
||||
== Running the service
|
||||
RESTful Notes is written using http://projects.spring.io/spring-boot[Spring Boot] which
|
||||
RESTful Notes is written using https://projects.spring.io/spring-boot[Spring Boot] which
|
||||
makes it easy to get it up and running so that you can start exploring the REST API.
|
||||
|
||||
The first step is to clone the Git repository:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2015 the original author or authors.
|
||||
* Copyright 2014-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -125,10 +125,10 @@ public class ApiDocumentation {
|
||||
this.noteRepository.deleteAll();
|
||||
|
||||
createNote("REST maturity model",
|
||||
"http://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
"https://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
createNote("Hypertext Application Language (HAL)",
|
||||
"http://stateless.co/hal_specification.html");
|
||||
createNote("Application-Level Profile Semantics (ALPS)", "http://alps.io/spec/");
|
||||
"https://github.com/mikekelly/hal_specification");
|
||||
createNote("Application-Level Profile Semantics (ALPS)", "https://github.com/alps-io/spec");
|
||||
|
||||
this.mockMvc.perform(get("/notes"))
|
||||
.andExpect(status().isOk())
|
||||
@@ -155,7 +155,7 @@ public class ApiDocumentation {
|
||||
|
||||
Map<String, Object> note = new HashMap<String, Object>();
|
||||
note.put("title", "REST maturity model");
|
||||
note.put("body", "http://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
note.put("body", "https://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
note.put("tags", Arrays.asList(tagLocation));
|
||||
|
||||
this.mockMvc.perform(
|
||||
@@ -183,7 +183,7 @@ public class ApiDocumentation {
|
||||
|
||||
Map<String, Object> note = new HashMap<String, Object>();
|
||||
note.put("title", "REST maturity model");
|
||||
note.put("body", "http://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
note.put("body", "https://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
note.put("tags", Arrays.asList(tagLocation));
|
||||
|
||||
String noteLocation = this.mockMvc
|
||||
@@ -249,7 +249,7 @@ public class ApiDocumentation {
|
||||
public void noteUpdateExample() throws Exception {
|
||||
Map<String, Object> note = new HashMap<String, Object>();
|
||||
note.put("title", "REST maturity model");
|
||||
note.put("body", "http://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
note.put("body", "https://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
|
||||
String noteLocation = this.mockMvc
|
||||
.perform(
|
||||
|
||||
@@ -20,7 +20,7 @@ to describe the relationships between resources and to allow navigation between
|
||||
|
||||
[getting-started-running-the-service]
|
||||
== Running the service
|
||||
RESTful Notes is written using http://projects.spring.io/spring-boot[Spring Boot] which
|
||||
RESTful Notes is written using https://projects.spring.io/spring-boot[Spring Boot] which
|
||||
makes it easy to get it up and running so that you can start exploring the REST API.
|
||||
|
||||
The first step is to clone the Git repository:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2016 the original author or authors.
|
||||
* Copyright 2014-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -68,11 +68,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
@SpringApplicationConfiguration(classes = RestNotesSpringHateoas.class)
|
||||
@WebAppConfiguration
|
||||
public class ApiDocumentation {
|
||||
|
||||
|
||||
@Rule
|
||||
public final JUnitRestDocumentation restDocumentation = new JUnitRestDocumentation("build/generated-snippets");
|
||||
|
||||
private RestDocumentationResultHandler documentationHandler;
|
||||
|
||||
private RestDocumentationResultHandler documentationHandler;
|
||||
|
||||
@Autowired
|
||||
private NoteRepository noteRepository;
|
||||
@@ -93,13 +93,13 @@ public class ApiDocumentation {
|
||||
this.documentationHandler = document("{method-name}",
|
||||
preprocessRequest(prettyPrint()),
|
||||
preprocessResponse(prettyPrint()));
|
||||
|
||||
|
||||
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
|
||||
.apply(documentationConfiguration(this.restDocumentation))
|
||||
.alwaysDo(this.documentationHandler)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void headersExample() throws Exception {
|
||||
this.mockMvc
|
||||
@@ -147,10 +147,10 @@ public class ApiDocumentation {
|
||||
public void notesListExample() throws Exception {
|
||||
this.noteRepository.deleteAll();
|
||||
|
||||
createNote("REST maturity model", "http://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
createNote("Hypertext Application Language (HAL)", "http://stateless.co/hal_specification.html");
|
||||
createNote("Application-Level Profile Semantics (ALPS)", "http://alps.io/spec/");
|
||||
|
||||
createNote("REST maturity model", "https://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
createNote("Hypertext Application Language (HAL)", "https://github.com/mikekelly/hal_specification");
|
||||
createNote("Application-Level Profile Semantics (ALPS)", "https://github.com/alps-io/spec");
|
||||
|
||||
this.mockMvc
|
||||
.perform(get("/notes"))
|
||||
.andExpect(status().isOk())
|
||||
@@ -173,11 +173,11 @@ public class ApiDocumentation {
|
||||
|
||||
Map<String, Object> note = new HashMap<String, Object>();
|
||||
note.put("title", "REST maturity model");
|
||||
note.put("body", "http://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
note.put("body", "https://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
note.put("tags", Arrays.asList(tagLocation));
|
||||
|
||||
ConstrainedFields fields = new ConstrainedFields(NoteInput.class);
|
||||
|
||||
|
||||
this.mockMvc
|
||||
.perform(post("/notes")
|
||||
.contentType(MediaTypes.HAL_JSON)
|
||||
@@ -205,7 +205,7 @@ public class ApiDocumentation {
|
||||
|
||||
Map<String, Object> note = new HashMap<String, Object>();
|
||||
note.put("title", "REST maturity model");
|
||||
note.put("body", "http://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
note.put("body", "https://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
note.put("tags", Arrays.asList(tagLocation));
|
||||
|
||||
String noteLocation = this.mockMvc
|
||||
@@ -214,7 +214,7 @@ public class ApiDocumentation {
|
||||
.content(this.objectMapper.writeValueAsString(note)))
|
||||
.andExpect(status().isCreated())
|
||||
.andReturn().getResponse().getHeader("Location");
|
||||
|
||||
|
||||
this.mockMvc
|
||||
.perform(get(noteLocation))
|
||||
.andExpect(status().isOk())
|
||||
@@ -241,7 +241,7 @@ public class ApiDocumentation {
|
||||
createTag("REST");
|
||||
createTag("Hypermedia");
|
||||
createTag("HTTP");
|
||||
|
||||
|
||||
this.mockMvc
|
||||
.perform(get("/tags"))
|
||||
.andExpect(status().isOk())
|
||||
@@ -256,7 +256,7 @@ public class ApiDocumentation {
|
||||
tag.put("name", "REST");
|
||||
|
||||
ConstrainedFields fields = new ConstrainedFields(TagInput.class);
|
||||
|
||||
|
||||
this.mockMvc
|
||||
.perform(post("/tags")
|
||||
.contentType(MediaTypes.HAL_JSON)
|
||||
@@ -271,7 +271,7 @@ public class ApiDocumentation {
|
||||
public void noteUpdateExample() throws Exception {
|
||||
Map<String, Object> note = new HashMap<String, Object>();
|
||||
note.put("title", "REST maturity model");
|
||||
note.put("body", "http://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
note.put("body", "https://martinfowler.com/articles/richardsonMaturityModel.html");
|
||||
|
||||
String noteLocation = this.mockMvc
|
||||
.perform(post("/notes")
|
||||
@@ -363,7 +363,7 @@ public class ApiDocumentation {
|
||||
tagUpdate.put("name", "RESTful");
|
||||
|
||||
ConstrainedFields fields = new ConstrainedFields(TagPatchInput.class);
|
||||
|
||||
|
||||
this.mockMvc
|
||||
.perform(patch(tagLocation)
|
||||
.contentType(MediaTypes.HAL_JSON)
|
||||
|
||||
@@ -440,7 +440,7 @@ public abstract class HypermediaDocumentation {
|
||||
* {
|
||||
* "_links": {
|
||||
* "self": {
|
||||
* "href": "http://example.com/foo"
|
||||
* "href": "https://example.com/foo"
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
@@ -461,7 +461,7 @@ public abstract class HypermediaDocumentation {
|
||||
* "links": [
|
||||
* {
|
||||
* "rel": "self",
|
||||
* "href": "http://example.com/foo"
|
||||
* "href": "https://example.com/foo"
|
||||
* }
|
||||
* ]
|
||||
* }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2016 the original author or authors.
|
||||
* Copyright 2014-2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -68,7 +68,7 @@ public class LinkExtractorsPayloadTests {
|
||||
public void singleLink() throws IOException {
|
||||
Map<String, List<Link>> links = this.linkExtractor
|
||||
.extractLinks(createResponse("single-link"));
|
||||
assertLinks(Arrays.asList(new Link("alpha", "http://alpha.example.com", "Alpha")),
|
||||
assertLinks(Arrays.asList(new Link("alpha", "https://alpha.example.com", "Alpha")),
|
||||
links);
|
||||
}
|
||||
|
||||
@@ -76,8 +76,8 @@ public class LinkExtractorsPayloadTests {
|
||||
public void multipleLinksWithDifferentRels() throws IOException {
|
||||
Map<String, List<Link>> links = this.linkExtractor
|
||||
.extractLinks(createResponse("multiple-links-different-rels"));
|
||||
assertLinks(Arrays.asList(new Link("alpha", "http://alpha.example.com", "Alpha"),
|
||||
new Link("bravo", "http://bravo.example.com")), links);
|
||||
assertLinks(Arrays.asList(new Link("alpha", "https://alpha.example.com", "Alpha"),
|
||||
new Link("bravo", "https://bravo.example.com")), links);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -85,8 +85,8 @@ public class LinkExtractorsPayloadTests {
|
||||
Map<String, List<Link>> links = this.linkExtractor
|
||||
.extractLinks(createResponse("multiple-links-same-rels"));
|
||||
assertLinks(Arrays.asList(
|
||||
new Link("alpha", "http://alpha.example.com/one", "Alpha one"),
|
||||
new Link("alpha", "http://alpha.example.com/two")), links);
|
||||
new Link("alpha", "https://alpha.example.com/one", "Alpha one"),
|
||||
new Link("alpha", "https://alpha.example.com/two")), links);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"_links": {
|
||||
"alpha": "http://alpha.example.com",
|
||||
"bravo": "http://bravo.example.com"
|
||||
"alpha": "https://alpha.example.com",
|
||||
"bravo": "https://bravo.example.com"
|
||||
},
|
||||
"_embedded": "embedded-test",
|
||||
"beta": "beta-value",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"_links": {
|
||||
"alpha": "http://alpha.example.com",
|
||||
"bravo": "http://bravo.example.com"
|
||||
"alpha": "https://alpha.example.com",
|
||||
"bravo": "https://bravo.example.com"
|
||||
},
|
||||
"beta": "beta-value",
|
||||
"charlie": "charlie-value"
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"links": [ {
|
||||
"rel": "alpha",
|
||||
"href": "http://alpha.example.com",
|
||||
"href": "https://alpha.example.com",
|
||||
"title": "Alpha"
|
||||
}, {
|
||||
"rel": "bravo",
|
||||
"href": "http://bravo.example.com"
|
||||
"href": "https://bravo.example.com"
|
||||
} ]
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"links": [ {
|
||||
"rel": "alpha",
|
||||
"href": "http://alpha.example.com/one",
|
||||
"href": "https://alpha.example.com/one",
|
||||
"title": "Alpha one"
|
||||
}, {
|
||||
"rel": "alpha",
|
||||
"href": "http://alpha.example.com/two"
|
||||
"href": "https://alpha.example.com/two"
|
||||
} ]
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"links": [ {
|
||||
"rel": "alpha",
|
||||
"href": "http://alpha.example.com",
|
||||
"href": "https://alpha.example.com",
|
||||
"title": "Alpha"
|
||||
} ]
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"links": {
|
||||
"alpha": [{
|
||||
"href": "http://alpha.example.com/one"
|
||||
"href": "https://alpha.example.com/one"
|
||||
}, {
|
||||
"href": "http://alpha.example.com/two"
|
||||
"href": "https://alpha.example.com/two"
|
||||
}]
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"_links": {
|
||||
"alpha": {
|
||||
"href": "http://alpha.example.com",
|
||||
"href": "https://alpha.example.com",
|
||||
"title": "Alpha"
|
||||
},
|
||||
"bravo": {
|
||||
"href": "http://bravo.example.com"
|
||||
"href": "https://bravo.example.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"_links": {
|
||||
"alpha": [{
|
||||
"href": "http://alpha.example.com/one",
|
||||
"href": "https://alpha.example.com/one",
|
||||
"title": "Alpha one"
|
||||
}, {
|
||||
"href": "http://alpha.example.com/two"
|
||||
"href": "https://alpha.example.com/two"
|
||||
}]
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"_links": {
|
||||
"alpha": {
|
||||
"href": "http://alpha.example.com",
|
||||
"href": "https://alpha.example.com",
|
||||
"title": "Alpha"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"_links": [ {
|
||||
"rel": "alpha",
|
||||
"href": "http://alpha.example.com/one"
|
||||
"href": "https://alpha.example.com/one"
|
||||
}, {
|
||||
"rel": "alpha",
|
||||
"href": "http://alpha.example.com/two"
|
||||
"href": "https://alpha.example.com/two"
|
||||
} ]
|
||||
}
|
||||
Reference in New Issue
Block a user