Cómo admitir JSONP con Spring MVC y múltiples tipos de respuesta

Tengo un método en un controlador que devolverá HTML o JSON según lo que se solicitó. Aquí hay un ejemplo simplificado de un método de este tipo, inspirado en la información sobre cómo hacer esto que encontré enesta pregunta:

<code>@RequestMapping(value="callback")
public ModelAndView callback(@RequestParam("c") String c) {
    Map response = new HashMap<String, String>();
    response.put("foo", "bar");
    return new ModelAndView("fake", "data", new JSONPObject(c, response));
}
</code>

Pongo el objeto JSON en el modelo porque tengo que hacerlo para poder acceder a él desde la vista que se muestra si se solicitó HTML. Pero esto plantea un problema cuando estoy procesando JSON con una devolución de llamada:

<code>curl 'http://localhost:8080/notes/callback.json?c=call'
{"data"call(:{"foo":"bar"})}
</code>

Como puede ver, porque puse mis datos en la ranura de "datos" en el modelo, cuando el modelo se representa como JSON, hay un ajuste adicional. Lo que estoy buscando es el JSON renderizado (técnicamente JSONP) para tener este aspecto:

<code>call({"data":{"foo":"bar"}})
</code>

¿Alguien puede ver una forma de llegar a donde estoy intentando ir sin romper la capacidad de devolver una vista que accede al objeto JSON durante el renderizado?

Respuestas a la pregunta(2)

Su respuesta a la pregunta