Previous Lecture Complete and continue  

  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 skip and see the complete implementation, feel free to jump ahead and 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.


3. Resources

- Content negotiation


Module 2 - Lesson 5 - transcript.pdf