Como suportar JSONP com Spring MVC e vários tipos de resposta

Eu tenho um método em um controlador que retornará HTML ou JSON dependendo do que foi solicitado. Aqui está um exemplo despojado de tal método, modelado após informações sobre como fazer isso que eu encontrei emessa questão:

<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>

Eu coloquei o JSONPObject no modelo porque eu tenho que ser capaz de alcançá-lo a partir da exibição que renderiza se o HTML foi solicitado. Mas isso representa um problema quando estou processando o JSON com um retorno de chamada:

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

Como você pode ver, porque eu coloco meus dados no slot de "dados" no modelo, quando o modelo é renderizado como JSON, há esse wrapping extra. O que estou procurando é o JSON renderizado (tecnicamente JSONP) para ficar assim:

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

Alguém pode ver uma maneira de chegar onde eu estou tentando ir sem quebrar a capacidade de retornar uma visão que acessa o JSONPObject durante a renderização?

questionAnswers(2)

yourAnswerToTheQuestion