Files
spring-data-examples/rest/headers
Mark Paluch 674c4e904c #325 - Upgrade to Spring Boot 2.0 M7.
Tweak bom to reflect Spring Framework and Spring Data versions.

Remove reactive Couchbase configuration code required prior to Spring Boot 2.0 M7.

Tweak CORS examples to adapt to Spring Framework's disabled allowCredentials by default.
2017-11-30 14:15:09 -08:00
..
2017-11-30 14:15:09 -08:00

= Spring Data REST - Headers example

This example shows how Spring Data REST auto-populates response headers for item resources and considers these values when conditional `GET` requests are used

== Auto-populated headers

If entities use optimistic locking (usually by demarcating a particular property as version property using a store-specific annotation), Spring Data REST will use the value stored in that property to populate the `ETag` header for `GET` and `HEAD` requests to the item resource.

If http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#auditing[Spring Data's auditing capabilities] are activated (using `@EnableJpaAuditing` in this case), the `Last-Modified` header is populated with the value of the last-modified property. See the `Customer` domain class for how to mark those.

== Conditional GET requests

The response headers can be used to issue conditional GET requests to save bandwidth in case the resource hasn't changed on the server:

.Conditional GET using If-Modified-Since
====
[source,bash]
----
$ curl http://localhost:8080/customers/1 -i -H "If-Modified-Since: Wed, 08 Apr 2015 17:24:20 GMT"
----

[source,http]
----
HTTP/1.1 304 Not Modified
----
====

.Conditional GET using If-None-Match
====
[source,bash]
----
$ curl http://localhost:8080/customers/1 -i -H "If-None-Match: 0"
----

[source,http]
----
HTTP/1.1 304 Not Modified
----
====

== Cross-Origin Resource Sharing

Client-side JavaScript that issue cross-origin requests require the server to evaluate cross-origin requests and respond appropriately.

.Cross-Origin Request
====
[source,bash]
----
$ curl 'http://localhost:8080/customers/' -i -H 'Origin: http://localhost'
----

[source,http]
----
HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://localhost
Vary: Origin
Access-Control-Allow-Credentials: true
----
====

== Spring RESTDocs

The sample uses https://github.com/wilkinsona/spring-restdocs[Spring RESTDocs] to document the HTTP interaction implemented using the test cases. See `WebIntegrationTests.setUp()` for general setup and the individual test methods with their usage of `….andDo(document(…))`.