Jak obsługiwać JSONP za pomocą Spring MVC i wielu typów odpowiedzi

Mam metodę w kontrolerze, która zwróci HTML lub JSON, w zależności od tego, o co pytano. Oto okrojony przykład takiej metody, wzorowany na informacjach o tym, jak to zrobić, które znalazłem wto pytanie:

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

Umieściłem obiekt JSONPObject w modelu, ponieważ muszę, aby móc do niego dotrzeć z widoku, który wyświetla, jeśli zażądano HTML. Ale to stwarza problem, gdy renderuję JSON wywołaniem zwrotnym:

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

Jak widać, ponieważ umieściłem moje dane w gnieździe „danych” w modelu, gdy model jest renderowany jako JSON, istnieje dodatkowe opakowanie. Poszukiwany JSON (technicznie JSONP) wygląda tak:

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

Czy ktoś może zobaczyć sposób, w jaki staram się przejść bez łamania możliwości zwracania widoku, który uzyskuje dostęp do JSONPObject podczas renderowania?

questionAnswers(2)

yourAnswerToTheQuestion