我知道可以在 Spring MVC 的早期版本中使用自定义过滤器来实现 JSONP。此外,此示例MappingJacksonHttpMessageConverter描述了一种在 Spring MVC 3.1 中通过扩展类和修改域对象来实现 JSONP 的方法。
除了使用上述方法之外,还有更简单(或传统)的方法来解决 Spring MVC 3.2 中的 JSONP 问题吗?我在 Spring 3.2 文档中根本没有看到 JSONP。
我知道可以在 Spring MVC 的早期版本中使用自定义过滤器来实现 JSONP。此外,此示例MappingJacksonHttpMessageConverter描述了一种在 Spring MVC 3.1 中通过扩展类和修改域对象来实现 JSONP 的方法。
除了使用上述方法之外,还有更简单(或传统)的方法来解决 Spring MVC 3.2 中的 JSONP 问题吗?我在 Spring 3.2 文档中根本没有看到 JSONP。
像这样更简单的方法
@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));
}
使用 spring 4.1,您可以通过 @ControllerAdvice 简单地做到这一点
https://spring.io/blog/2014/07/28/spring-framework-4-1-spring-mvc-improvements
您可以简单地使用 Bhagya Silva 的 spring-jsonp-support 作为项目的依赖项。
https://github.com/bhagyas/spring-jsonp-support
有关 README.md 文件的更多信息。
我一直在为 JSONP 方法寻找一种更简单的 OOB 方法(JSONP/CORS 应该内置于 IMO...不需要任何自定义代码)...从未找到任何...但是在与 Spring 团队联系后,它事实证明,JSONP 现在在 4.0.5 中支持 OOB,MappingJacksonJsonView并且稍后会内置对 CORS 的支持。
这是处理这种情况的最简单方法
@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();
}