泽西回应与JSONP

时间:2015-10-15 11:40:35

标签: jersey jsonp

我正在创建一个从浏览器和Java客户端调用的Jersey API服务。代码在从同一个域调用时工作,但是当从其他域调用它时它不起作用,所以我创建了一个尝试用JSONWithPadding包装responseJson String。它仍然发送正常的响应,而不是我正在寻找的响应。服务的实施是泽西岛(Maven Path Below:

        <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-servlet</artifactId>
        <version>${jersey.version}</version>
        </dependency>

的示例代码
@Path("/v1/sample")
@Produces({"application/json"})
public class SampleService
{
      @GET
      @Path("/service1")
      @Produces({"application/json"})
      public Response notWorking(@Context UriInfo uriInfo)
      {
        String result = "{\"name\":\"John Johnson\",\"street\":\"Oslo West 16\",\"phone\":\"555 1234567\"}";

        String callbackStr = (String)uriInfo.getQueryParameters().getFirst("callback");
        System.out.println("callbackStr ="+callbackStr);

        JSONWithPadding paddedJson = new JSONWithPadding(result, callbackStr);

        return Response.status(200).entity(paddedJson).build();
      }
}

致电1:http://localhost:8080/myapi/v1/sample/service1 回复:{“名称”:“约翰逊”,“街道”:“奥斯陆西16”,“电话”:“555 1234567”}

致电2:http://localhost:8080/myapi/v1/sample/service1?callback=? 回复:{“名称”:“约翰逊”,“街道”:“奥斯陆西16”,“电话”:“555 1234567”}

在电话2中:我正在寻找的响应是 ?({“name”:“John Johnson”,“street”:“Oslo West 16”,“phone”:“555 1234567”})

当然我错过了一些东西,但无法理解。请有人帮忙

此致 阿米特

1 个答案:

答案 0 :(得分:1)

在你的例子中有几件事要处理。

  • JSONP需要以下响应内容类型之一:“application / javascript”,“application / x-javascript”,“application / ecmascript”,“text / javascript”,“text / x-javascript”,“text / ecmascript “,”text / jscript“。它不适用于“application / json”。
  • 您必须确保收到的QueryParam的名称称为“callbackStr”。它通常被称为“回调”。
  • 您可以直接返回JSONWithPadding对象。

    @GET
    @Path("/service1")
    @Produces({"application/javascript"})
    public JSONWithPadding nowItWorks(@QueryParam("callbackStr") String callbackStr, @Context UriInfo uriInfo)
    {
       String result = "{\"name\":\"John Johnson\",\"street\":\"Oslo West 16\",\"phone\":\"555 1234567\"}";
    
       System.out.println("callbackStr ="+callbackStr);
    
       return new JSONWithPadding(result, callbackStr);
     }
    

希望这有帮助。