For a web application, I need to return a model to a view.
For a mobile application or API, I want to return xml or json.
Is it possible to do all of these using a single controller method, or do I have to duplicate this and create seperate API controller’s etc?
With Spring MVC 3.x you can do this with just the one controller method. The trick is to wire up the appropriate
ContentNegotiatingViewResolverin your Spring config. You can configure it to return the desired content type based on file extension and/or requested mime type.It works best for methods that only add a single model attribute to the
Model, otherwise the JSON/XML starts to get a bit ugly.I often find its simpler/nicer to implement separate controller methods for my web service requests, as you can better control the format of the JSON/XML and the code is easier to maintain in the long term.
EDIT: Just to qualify my comment above, I find that complex JSP pages where there might be up to 5-10 model attributes added to the page, that the resulting JSON tends to be quite messy and you usually find you only really want 1-2 of those in the JSON. OTOH, simple pages with 1-2 models added work quite well.