在Spring MVC 3.2中实现JSONP

时间:2013-03-07 22:01:03

标签: spring-mvc jsonp

据我所知,可以在早期版本的Spring MVC中使用自定义过滤器来实现JSONP。另外this example描述了一种通过扩展MappingJacksonHttpMessageConverter类和修改域对象来在Spring MVC 3.1中实现JSONP的方法。

除了使用上述方法之外,是否有更简单(或传统)的方法来解决Spring MVC 3.2中的JSONP问题?我在Spring 3.2文档中没有看到JSONP的解决方法。

5 个答案:

答案 0 :(得分:3)

像这样简单的方式

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

答案 1 :(得分:2)

使用Spring 4.1,您可以使用@ControllerAdvice

完成此操作

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

答案 2 :(得分:1)

我一直在寻找一种更简单的OOB方法来实现JSONP方法(JSONP / CORS应该内置IMO ......不需要任何自定义代码)...从未找到任何...但是在与Spring接触后团队,事实证明JSONP is now supported OOB in 4.0.5 via MappingJacksonJsonView和内置的CORS支持稍后会跟进。

答案 3 :(得分:0)

你可以简单地使用Bhagya Silva的spring-jsonp-support作为你项目的依赖。

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

README.md文件中提供了更多信息。

答案 4 :(得分:0)

以下是处理此方案的最简单方法

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