Spring MVC @RequestMapping headers can accept only one value?

Bobo picture Bobo · Feb 10, 2011 · Viewed 68.9k times · Source

This will work:

@RequestMapping(value = "/test", method = RequestMethod.POST,
    headers = {"content-type=application/json"}) {
    .......
}

If I add another value to it like the following, then it will fail and tell me this:

The specified HTTP method is not allowed for the requested resource (Request method 'POST' not supported)

@RequestMapping(value = "/test", method = RequestMethod.POST,
    headers = {"content-type=application/json","content-type=application/xml"}) {
    .......
}


I guess this is because Spring thinks the two content type values have "AND" relationship but instead I want them to be "OR".

Any suggestions?

Thanks!

Answer

MasterV picture MasterV · Nov 13, 2012

If you are using Spring 3.1.x. You can look at using consumes, produces attributes of @RequestMapping annotation. Here is the Spring blog post on the improvements:

http://spring.io/blog/2011/06/13/spring-3-1-m2-spring-mvc-enhancements/

Snippet from the doc above:

@RequestMapping(value="/pets", headers="Content-Type=application/json")
public void addPet(@RequestBody Pet pet, Model model) {
    // ...
}

is replaced by:

@RequestMapping(value="/pets", consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {
    // ...
}

In addition, if you need multiple media types. You can do the following:

produces={"application/json", "application/xml"}

consumes={"application/json", "application/xml"}