我试图将一个 JSON文档从AngularJS应用程序发布到Jersey REST服务.请求失败,通知我:

XMLHttpRequest无法加载http:// localhost:8080 / my.rest.service / api / order / addOrder.请求资源上不存在“访问控制允许源”标头.因此,原“http:// localhost”不允许访问.

泽西REST Post功能

我启用了(我认为是)适当的标题:Access-Control-Allow-Origin和Access-Control-Allow – 方法的响应,如下面的方法所示:

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/addOrder")
public Response addOrder(DBObject dbobject) {
    DB db = mongo.getDB("staffing");
    DBCollection col = db.getCollection("orders");
    col.insert(dbobject);
    ObjectId id = (ObjectId)dbobject.get("_id");
    return Response.ok()
            .entity(id)
            .header("Access-Control-Allow-Origin","*")
            .header("Access-Control-Allow-Methods","GET,POST,DELETE,PUT")
            .allow("OPTIONS")
            .build();
}

角度JS控制器

我已经声明了应用程序并配置了$httpProvider与所有在类似Stack Overflow中建议的设置问题:

var staffingApp = angular.module('myApp',['ngRoute','ui.bootstrap']);
myApp.config(['$httpProvider',function ($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
    $httpProvider.defaults.headers.common["Accept"] = "application/json";
    $httpProvider.defaults.headers.common["Content-Type"] = "application/json";
 }]);

我也创建了这个控制器来打开一个模态并处理窗体:

var modalCtrl = function($scope,$modal,$log,$http,$location) {          
    $scope.order = {
        activityTitle : null,anticipatedAwardDate : null,component : null,activityGroup : null,activityCategory : null,activityDescription : null
    };
    $scope.open = function () {
        var modalinstance = $modal.open({
            templateUrl: 'addOrder.html',windowClass: 'modal',controller: modalinstanceCtrl,resolve: {
                order : function () {
                    return $scope.order;
                    }
                }
            });
        modalinstance.result.then(function (oid) {
            $log.info("Form Submitted,headed to page...");
            $location.path("/orders/" + oid);
        },function() { 
            $log.info("Form Cancelled")
        });
    };
};

var modalinstanceCtrl = function ($scope,$modalinstance,order) {
    $scope.order = order,$scope.ok = function () {
        $log.log('Submitting user info');
        $log.log(order);
        $log.log('And Now in JSON....');
        $log.log(JSON.stringify(order));
        $http.post('http://localhost:8080/my.rest.service/apI/Order/addOrder',JSON.stringify(order)).success(function(data){
            $log.log("here's the data:\n");
            $log.log(data);
            $modalinstance.close(data._id.$oid)
        });
    };
    $scope.cancel = function () {
        $modalinstance.dismiss('cancel');
    };      
};
myApp.controller('modalCtrl',modalCtrl);

无济于事,我试过:

>从响应头删除.allow(“OPTIONS”).
>从应用程序中删除$httpProvider配置
>将$httpProvider配置更改为调用myApp.config(function($httpProvider){…}),传递函数本身而不是数组.

使用相同的配置获取请求:

@GET
@Path("/listall/")
@Produces(MediaType.APPLICATION_JSON)
public Response listAll(){
    DB db = mongo.getDB("staffing");
    DBCollection col = db.getCollection("orders");
    List<DBObject> res = col.find().limit(200).toArray();
    return Response.ok()
            .entity(res.toString())
            .header("Access-Control-Allow-Origin",PUT")
            .allow("OPTIONS")
            .build();       
}

这个控制器工作正常:

myApp.controller('orderListCtrl',function ($scope,$http){
    $http.get('http://localhost:8080/my.rest.service/apI/Order/listall').success(function(data) {
        for (var i = 0; i < data.length; i++) {
            if (data[i].description.length > 200) {
                data[i].shortDesc = data[i].description.substring(0,196) + "...";
            } else {
                data[i].shortDesc = data[i].description;
            }
        };
        $scope.orders = data;
    });
});

更新#1:

我在同一个原始基础上尝试过相同的请求,基本上是在从locahost:8080的REST服务旁边服务Angular应用程序.这个配置是有效的,但需要稍微改动,并且在我的代码中进行了一些一般的清理,我在上面编辑过.

邮政仍然作为CORS请求失败,但是我仍然在寻找这个配置中缺少的部分.

更新#2:

我调查了工作请求的头文件,并将其与非工作请求进行比较.

工作获取请求返回以下标题及其响应:

不工作的请求返回带有响应的头文件,但是缺少Access-Control-Allow-Origin标头:

我相信现在这个问题已经成为一个问题,在返回给客户端之前,将这些标题从响应中删除,这样会导致浏览器的请求失败.

更新#3:

从Chrome的REST控制台扩展程序向同一个URL提交测试POST请求返回相应的响应标头,如下面的屏幕截图所示.

在这一点上,我无法确定什么是删除泽西和我的角色客户端之间的标题,但我相信这是罪魁祸首.

解决方法

问题原因是在使用正确的十字原点标题之前,在POST请求之前的飞行前发送的OPTIONS请求的处理不足.

我可以通过下载和实现这个页面上找到的CORS过滤器来解决这个问题:http://software.dzhuvinov.com/cors-filter-installation.html.

如果您遇到类似的问题,请按照说明进行测试,以查看您的OPTIONS请求不再失败,并且紧随其后的成功请求.

java – 启用CORS发送请求从AngularJS到泽西的更多相关文章

  1. canvas中普通动效与粒子动效的实现代码示例

    canvas用于在网页上绘制图像、动画,可以将其理解为画布,在这个画布上构建想要的效果。本文详细的介绍了粒子特效,和普通动效进行对比,非常具有实用价值,需要的朋友可以参考下

  2. H5混合开发app如何升级的方法

    本篇文章主要介绍了H5混合开发app如何升级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. canvas学习和滤镜实现代码

    这篇文章主要介绍了canvas学习和滤镜实现代码,利用 canvas,前端人员可以很轻松地、进行图像处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. localStorage的过期时间设置的方法详解

    这篇文章主要介绍了localStorage的过期时间设置的方法详解的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. 详解HTML5 data-* 自定义属性

    这篇文章主要介绍了详解HTML5 data-* 自定义属性的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  6. HTML5的postMessage的使用手册

    HTML5提出了一个新的用来跨域传值的方法,即postMessage,这篇文章主要介绍了HTML5的postMessage的使用手册的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. 教你使用Canvas处理图片的方法

    本篇文章主要介绍了教你使用Canvas处理图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. ios – Swift语言:如何调用SecRandomCopyBytes

    从Objective-C,我可以这样做:在Swift中尝试这个时,我有以下内容:但我得到这个编译器错误:data.mutableBytes参数被拒绝,因为类型不匹配,但我无法弄清楚如何强制参数.解决方法这似乎有效:

  9. 使用Firebase iOS Swift将特定设备的通知推送到特定设备

    我非常感谢PushNotifications的帮助.我的应用聊天,用户可以直接向对方发送短信.但是如果没有PushNotifications,它就没有多大意义.它全部设置在Firebase上.如何将推送通知从特定设备发送到特定设备?

  10. ios – NSData to Data swift 3

    如何将此代码转换为使用Swift3数据?

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部