我知道可以在 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();
}