Comment soutenir JSONP avec Spring MVC et plusieurs types de réponse

J'ai une méthode d'un contrôleur qui sera de retour HTML ou JSON en fonction de ce qui a été demandé. Voici un stripped-down exemple d'une telle méthode, qui s'inspire d'informations sur la façon de faire ce que j'ai trouvé dans cette question:

@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));
}

J'ai mis le JSONPObject dans le modèle parce que j'ai afin d'être en mesure de l'atteindre à partir de la vue qui rend si HTML a été demandé. Mais cela pose un problème lorsque je me suis rendu JSON avec un rappel:

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

Comme vous pouvez le voir, parce que j'ai mis mes données dans la partie "données" fente dans le modèle, lorsque le modèle est rendu sous forme de JSON il n'y a que l'emballage supplémentaire. Ce que je cherche est le rendu du JSON (techniquement JSONP) pour ressembler à ceci:

call({"data":{"foo":"bar"}})

Peut-on voir un moyen pour arriver là où je suis en train de passer sans rupture de la capacité de retourner un point de vue qui accède à la JSONPObject lors du rendu?

OriginalL'auteur bkocik | 2012-04-25