【问题标题】:Implementing JSONP in Spring MVC 3.2在 Spring MVC 3.2 中实现 JSONP
【发布时间】:2013-02-23 07:49:15
【问题描述】:

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

除了使用上述方法之外,还有更简单(或常规)的方法来解决 Spring MVC 3.2 中的 JSONP 问题吗?我在 Spring 3.2 文档中根本没有看到 JSONP。

【问题讨论】:

    标签: spring-mvc jsonp


    【解决方案1】:

    像这样更简单的方法

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

    【讨论】:

    • 我是jackson api的新手,我应该用什么来代替new JSONPObject(callBack,map)中使用的callback
    • callBack 是该查询完成后将在 javascript 中调用的函数的名称。
    • 好的。如果提供一些工作示例或任何对其进行更多解释的网站,将会很有帮助。
    【解决方案2】:

    在 spring 4.1 中,您可以通过 @ControllerAdvice 简单地做到这一点

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

    【讨论】:

      【解决方案3】:

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

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

      更多信息请参见 README.md 文件。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          这是处理这种情况的最简单方法

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

          【讨论】:

            猜你喜欢
            • 2014-09-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-03-12
            • 1970-01-01
            • 2013-06-21
            • 2014-01-25
            • 2013-12-13
            相关资源
            最近更新 更多