Lesson 5: Support both XML and JSON
1. Goal
Learn the basics of Content Negotiation and enable XML support for the API in Spring (starting with Spring 4.1).
2. Lesson Notes
The relevant module you need to import when you're starting with this lesson is: m2-lesson5-start
If you want to have a look at the fully implemented lesson, as a reference, feel free to import: m2-lesson5
The Maven Dependencies
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency> <dependency> <groupId>org.codehaus.woodstox</groupId> <artifactId>woodstox-core-asl</artifactId> <version>4.4.1</version> </dependency>
Advantages of using Jackson for XML
Using the new Jackson Spring support for XML has quite a few advantages over using another XML library (such as XStream):
- we're already using Jackson for JSON
- we can re-use the exact same configuration that we're already using for JSON
- no need to add extra annotations to the DTOs
- JSON Views support
Why change the default STAX implementation
Woodstox has a few advantages over the default STAX impl in the JDK:
- it's faster
- has extra features
- it's more mature and well maintained
Basics of Content Negotiation
- a JSON Request:
GET http://localhost:8082/api/privileges Accept: application/json [ { "id" : 1, "name" : "ROLE_PRIVILEGE_READ", "description" : null }, ... ]
- an XML Request:
GET http://localhost:8082/api/privileges Accept: application/xml <List> <item> <id>1</id> <name>ROLE_PRIVILEGE_READ</name> <description/> </item> ... </List>
Quick note - starting with Spring 4.3.2, we now have support for multiple Accept headers in the HeaderContentNegotiationStrategy.
Upgrade Notes
As mentioned, the woodstox-core-asl dependency which is used for XML processing is a mature and well-maintained library. However, note that the newer versions of the dependency have a different group and artifact id:
<dependency> <groupId>com.fasterxml.woodstox</groupId> <artifactId>woodstox-core</artifactId> <version>6.2.1</version> </dependency>
3. Resources