JAX-RS (jersey) -> Angular.js 通过 REST
Posted
技术标签:
【中文标题】JAX-RS (jersey) -> Angular.js 通过 REST【英文标题】:JAX-RS (jersey) -> Angular.js via REST 【发布时间】:2013-10-18 03:15:49 【问题描述】:我有一个球衣服务器正在运行。直接从浏览器运行时,我得到正确的响应。但是,当我尝试从 angular.js 的 $resource 访问其余服务时,我在尝试访问正确的 url 时在控制台中收到以下错误。我尝试在线阅读所有材料,例如 http://simplapi.wordpress.com/2013/04/10/jersey-jax-rs-implements-a-cross-domain-filter/ 来设置 CORS 过滤器,但该指南似乎过时且晦涩难懂。 (我使用的是最新的球衣实现)。
加载资源失败:Origin localhost:63342 is not allowed 通过访问控制允许来源。
使我需要的数据在球衣中可用的方法。
@Path("/id/id")
@GET
@Produces(MediaType.APPLICATION_JSON)
public boolean validateSSN(@PathParam("id") String id)
IdValidator idv = new IdValidator(id);
return idv.Validate();
angular.js 中的访问器方法:
services.factory('ReplyFactory', function ($resource)
console.log("test");
return $resource(baseUrl + '/myproject/api/validate/id/:id', id: '@id',
'get': method: 'GET' );
);
【问题讨论】:
【参考方案1】:那么您需要做的是确保来自您的资源的所有响应都具有以下 http 标头:
Access-Control-Allow-Origin
- 指定应接受来自哪些来源的请求(在您的情况下为 localhost:63342)
Access-Control-Allow-Headers
- 指定允许通过 CORS 使用哪些标头
Access-Control-Allow-Methods
- 指定允许通过 CORS 使用哪些方法
还有诸如Access-Control-Allow-Credentials
等其他标头。
因此,您只需在回复中至少添加 Access-Control-Allow-Origin
标头即可。如何做到这一点取决于您的环境。
你可以manually define those headers on each resource。
您可以define Jersey filter 将 CORS 标头添加到所有响应中
您可以use servlet filter 将 CORS 标头添加到所有响应中
Tomcat和Jetty也有具体的解决方案
有很多方法可以做到这一点,但所有这些都是关于同一件事 - 您只需在服务器响应中添加一个额外的标头。
【讨论】:
以上是关于JAX-RS (jersey) -> Angular.js 通过 REST的主要内容,如果未能解决你的问题,请参考以下文章
Jersey / JAX-RS ExceptionMapper MySQL