开发者社区> 问答> 正文

Spring MVC实现远程调用并获取返回值? 400 报错

Spring MVC实现远程调用并获取返回值? 400 报错

ajax跨域请求:

$("#jifei").click(function() {

        Tips.confirm("确认计费?", function() {
            var cmd_uuid = $('input[name="cmd_uuid"]').val();
            $.ajax({
                url : "http://127.0.0.1:8083/tally/command/tally-order-reset",
                data : {
                    "cmd_uuid" : cmd_uuid
                },
                type : "get",
                success : function(re) {
                    Tips.tips(re.msg,re.success);
                },
                error : function(data) {
                    Tips.tips(data.msg+"返回失败");
                }
            });
        });

在被请求项目里面的spring.xml中加上:(注意:这里需要引用spring4.2及版本更高的,否则不支持<mvc:cors>)

<mvc:cors>
        <mvc:mapping path="/**" allowed-origins="*" allow-credentials="true" max-age="1800" allowed-methods="GET,POST,OPTIONS"/>
 </mvc:cors>

如果添加了拦截器需要把/tally/command/tally-order-reset加上去:

<mvc:interceptor>
            <mvc:mapping path="/**" />
            <mvc:exclude-mapping path="/tally/command/tally-order-reset" />
            <bean class="com.feiliks.hn.common.interceptor.PermissionInterceptor" />
 </mvc:interceptor>

然后再被请求的tally-order-reset方法上面加上:@CrossOrigin 代码如下

@CrossOrigin(origins = "*", maxAge = 3600)
@RequestMapping("tally-order-reset")
@ResponseBody
public ResponseModel reset(Long cmd_uuid){
        Boolean ret = true;
        ret = this.redisDao.setIfAbsentValue("tally-order-reset:" + cmd_uuid.toString(), 1);
        if (ret){
            this.redisDao.expire("tally-order-reset:" + cmd_uuid.toString(), 3, TimeUnit.MINUTES);
            this.tallyOrderService.reset(cmd_uuid);
            this.redisDao.delKey("tally-order-reset:" + cmd_uuid.toString());
        }else{
            ErrorType et = this.redisDao.getHashValue(RedisCacheTableKey.KEY_ERROR_TYPE, "S0001", ErrorType.class)==null?new ErrorType("S0001") : this.redisDao.getHashValue(RedisCacheTableKey.KEY_ERROR_TYPE, "S0001", ErrorType.class);
            return super.fail(et.getTrace(), et);
        }
        return super.success("计费成功!");
        
    }

通过以上方法,就能够实现ajax跨域请求并能够获取返回值,希望能给大家帮助。

展开
收起
优选2 2020-06-09 11:20:26 452 0
1 条回答
写回答
取消 提交回答
  • ajax跨域不是浏览器的限制吗,为什么后台可以解决呢?######回复<aclass="referer"target="_blank">@大河向东流啊:关键是你的ajax跨域请求就到不了后台######如果你把项目做出来而这个功能有浏览器的限制,那用户知道怎么办吗,难道用户要处理浏览器的限制吗?显然是不可能的,后台处理了就不必管浏览器了######

    添加架构师交流圈,请加微信号 codingcx,也可以添加java技术交流QQ群号318815519,大家一起快乐交流技术,互相学习分享。

    2020-06-09 15:44:27
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载