spring boot,使用AsyncRestTemplate进行异步Http调用,总是返回302

两个web应用,WebAppA和WebAppB,WebAppA通过AsyncRestTemplate来异步调用WebAppB,调用过程中,用一个类A来互相传递数据,以Json的形式,类A如下:

public class A
    {
        private String str;

        public A()
        {
        }

        public String getStr()
        {
            return str;
        }

        public void setStr(String str)
        {
            this.str = str;
        }
    }

整个过程,就相当于是,WebAppA发过去一个

{
    "str": "123"
}

然后WebAppB把里面的str给改了,在传回给WebAppA

{
    "str": "123POST success"
}

WebAppB作为被调用者的代码是:

@RequestMapping(value = "/", method = RequestMethod.POST)
    public A test_POST(@RequestBody A a)
    {
        a.setStr(a.getStr() + "POST success");
        System.out.println("POST success WebAppB-0.0.1-SNAPSHOT.war!");
        return a;
    }

WebAppB我用PostMan测试过了,可以得到正确的返回的。

然后调用者WebAppA的调用代码是:

//POST
        a = new A();
        a.setStr("123");
        MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
        headers.add("Content-Type", "application/json;charset=UTF-8");
        HttpEntity<Object> httpEntity = new HttpEntity<>(headers);

        AsyncRestTemplate template = new AsyncRestTemplate();
        String url = "http://127.0.0.1:12001/"
        //调用完后立即返回(没有阻塞)
        ListenableFuture<ResponseEntity<A>> forEntity = template.postForEntity(url, httpEntity, A.class, a);

        //异步调用后的回调函数
        forEntity.addCallback(new ListenableFutureCallback<ResponseEntity<A>>()
        {
            //调用成功
            @Override
            public void onSuccess(ResponseEntity<A> resp)
            {
                a = resp.getBody();
            }

            //调用失败
            @Override
            public void onFailure(Throwable t)
            {
                System.out.println(t.getMessage());
            }
        });

结果,总是会返回302.
如图:
图片描述

(无视url中的路径,路径肯定没有问题,我在tomcat里面配了一个根目录,上面贴的代码体现不到,为了各位看着方便,我就把截图中的给删了,路径测过的,肯定没有问题)

麻烦各位帮我看一下,大概是什么问题导致的,多谢了。

阅读 10.1k
1 个回答

展开Headers中的Location头信息,看看path是什么,然后重新修改请求url测试。
HTTP 302 浏览器会自动跳转到Location的url,但是编程不一定会

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题