I’m creating a RESTful API that returns JSON or XML depending on the Accept header (application/json vs text/xml). I have this working fine for JSON but can’t seem to get it working when for XML. I am testing using the Poster plugin client for Firefox.
I was under the impression that I just needed to add the Jackson and JAXB libraries to the app’s classpath. Again, it works for JSON but not XML.
Originally I was getting 406 error when sending the Accept “text/xml” header. Then I added @XmlRootElement(name="contact") to my entity and now I’m getting a 500 error. Should I need to put @XmlRootElement on every entity?
Although the response is a 500 error, I don’t see any errors reported in the console. I’m testing in Eclipse running Tomcat 7. Shouldn’t i see some error in the console when i receive a 500 error?
My “mvc-dispatcher-servlet.xml” has <mvc:annotation-driven />
Here’s the relevant code from my controller:
@Controller
@RequestMapping("/contacts")
public class ContactsController {
@Autowired
ContactsService contactsService;
@RequestMapping(value="/{id}",
method=RequestMethod.GET,
headers = {"Accept=application/json, text/xml"})
public @ResponseBody Contact getContact(@PathVariable("id") int id) {
Contact queryContact = new Contact(id);
Contact result = contactsService.getContact(queryContact);
return result;
}
}
The “mvc-dispatcher-servlet.xml” is really simple. Do I need anything other than:
<context:component-scan base-package="contactsapp.web.controller" />
<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/resources/"/>
I’m using Spring 3.1 and the following:
<dependency org="com.sun.xml.bind" name="jaxb-impl" rev="2.2.5-b10" conf="runtime->default"/>
<dependency org="org.codehaus.jackson" name="jackson-mapper-asl" rev="1.7.1" conf="runtime->default"/>
It turns out I had it configured correctly. Once I enabled more verbose logging I realized I had circular dependencies in my entity classes and had to add
@XmlTransienton those fields