Another one of the new Spring 3.2 features is better support for content negotiation. I’ll introduce the topic briefly here, and share some thoughts.
Content negotiation is used to indicate either what type of content a client would like to receive, or to indicate what type of content the server will return. This is useful for various reasons, some being:
- Enabling servers to deliver content of the client’s preferred type.
- Enabling better error handling, when there is a mis-match in client-server content types.
- Serving content on the same location to different kinds of clients, such as browsers or mobile apps.
Anyway this is hardly news for anyone (!) and the technology is widely used, particularly in its most classic way, via HTTP headers. But with Spring 3.2, there are new features that help us with making the most out of a variety of content negotiation techniques:
- URL path extension. E.g. ‘some/url/index.html’ versus ‘some/url/index.json’
- URL path parameter. E.g. ‘some/url/index?format=html’
- HTTP ‘Accept’ header
To minimize Internet waste, I’ve decided to not go more in depth here, and I will simply recommend that you take a look at this Spring blog which does a great job of explaining the topic. Or you can skip the reading and jump straight to the author’s demo!