Реализация JSONP в Spring MVC 3.2

Я понимаю, что пользовательские фильтры можно использовать в более ранней версии Spring MVC для реализации JSONP. Кроме того, этот пример описывает метод реализации JSONP в Spring MVC 3.1 путем расширения класса MappingJacksonHttpMessageConverter и изменения объектов предметной области.

Существует ли более простой (или традиционный) метод обращения к JSONP в Spring MVC 3.2, помимо использования вышеуказанных методов? Я вообще не видел, чтобы JSONP упоминался в документации Spring 3.2.


person Tom    schedule 07.03.2013    source источник


Ответы (5)


проще так

@RequestMapping(value = "/jsonp", method = RequestMethod.GET)
@ResponseBody
public String jsonp(@RequestParam("c")String callBack) throws Exception{
    ObjectMapper objectMapper = new ObjectMapper();
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("data", "<p>jsonp data<p>");
    return objectMapper.writeValueAsString(new JSONPObject(callBack,map));
}
person Larry.Z    schedule 09.08.2013
comment
Я новичок в jackson api, что мне использовать вместо обратного вызова, используемого в new JSONPObject(callBack,map). - person Sumit Ramteke; 08.05.2014
comment
callBack — это имя функции, которая будет вызываться в javascript после завершения этого запроса. - person Larry.Z; 09.05.2014
comment
Ok. Будет полезно, если вы предоставите какой-нибудь рабочий пример или какой-либо сайт, который объясняет немного больше. - person Sumit Ramteke; 09.05.2014

С Spring 4.1 вы можете сделать это очень просто с помощью @ControllerAdvice

https://spring.io/blog/2014/07/28/spring-framework-4-1-spring-mvc-improvements

person chrismarx    schedule 26.03.2015

Вы можете просто использовать поддержку spring-jsonp от Bhagya Silva в качестве зависимости от вашего проекта.

https://github.com/bhagyas/spring-jsonp-support

Более подробная информация доступна в файле README.md.

person bhagyas    schedule 22.03.2013

Я искал более простой подход OOB для подхода JSONP (JSONP/CORS должен быть встроенным IMO... не требует никакого пользовательского кода)... так и не нашел... но после обращения к команде Spring он оказывается, что JSONP теперь поддерживается OOB в 4.0.5 через MappingJacksonJsonView и встроенную поддержку для CORS, чтобы следовать позже.

person Dexter Legaspi    schedule 15.09.2014

Вот самый простой способ справиться с этим сценарием

   @GET
    @Path("/jsonp")
    @Produces("application/json")
    public Response jsonp(@QueryParam("data") String json, 
            @QueryParam("callback") String callBack     
            @Context HttpServletRequest request) throws Exception { 

     String jsonResponse= "{ \"sttaus\" :\"some data\" }";
     try{ 
        .. // do your business logic      

     }catch(Exception e){ ... }

     return Response.status(201).entity(callBack+"("+jsonResponse+")").build(); 
   }
person Vasanth Umapathy    schedule 05.08.2014