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?