【问题标题】:REST - Jersey -Providing Cross Site AccessREST - Jersey - 提供跨站点访问
【发布时间】:2013-02-22 02:06:12
【问题描述】:

我想我正在尝试对我正在开发的 REST API 做出一些设计选择。

-提供跨站点访问是个好主意吗?换句话说,我应该允许JSONP 回复吗?我倾向于提供 JSOP 响应,因为我猜测如果我不允许 JSONP,那么在浏览器中运行的 javascript 客户端将无法访问我的 API。如果您对这个想法有任何支持或反对的经验,我将不胜感激。

-使用 Jersey,我可以通过使用 @Produces("application/javascript") 注释我的方法并返回 JSONWithPadding 的实例来提供 JSONP 响应。像这样:

    @GET
    @Produces("application/javascript")
    @Path("{film_id}")
    public JSONWithPadding crossSitefilmWithID(
                @DefaultValue(NO_ID) @PathParam("film_id") final String filmId,
                @DefaultValue(CALLBACK) @QueryParam("callback") String callback) {
    ....
        return new JSONWithPadding(films.get(id), callback);
    }

上面的示例有效,但我不知道如何返回 javax.ws.rs.core.Response(当我实例化 JSONWithPadding(response, callback) 时,Jersey 会抛出异常。

所以我猜如果我需要向客户端返回元信息,我需要设计自己的响应类版本?

【问题讨论】:

    标签: rest jersey jsonp


    【解决方案1】:

    JSONP 有很多细节。查看What is JSONP all about? 了解更多信息。在这一点上,如果您想从其他域提供对您的 API 的 JavaScript 访问,那么这是可行的方法。是否对您的应用有意义取决于您。

    关于第二个问题,我一直这样做是为了向客户提供 XML、JSON 和 JSONP:

    @GET
    @Path("/thing")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, CustomMediaTypes.APPLICATION_JSONP})
    public Response doThing(@QueryParam("callback") @DefaultValue("fn") String callback) {      
      // Do the thing
      GenericEntity<MyThing> response = new GenericEntity<MyThing>(thing){};
      return Response.ok(new JSONWithPadding(response, callback)).build();
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多