【问题标题】:incorrect response from http request using spring/tomcat使用 spring/tomcat 的 http 请求响应不正确
【发布时间】:2018-01-12 22:43:58
【问题描述】:

我遇到了从简单的 http 请求中收到错误答案的情况。

在远程 tomcat 服务器 A 我有:

@RequestMapping(value = "/test/dosomething", method = RequestMethod.GET)
public String doSomething() {
    RestTemplate rt = new RestTemplate();
    ResponseEntity<String> rpe = 
    rt.getForEntity("http://foo.dns/test/getstring", String.class);
    return "redirect:" + rpe.getBody();
}

此方法调用远程tomcat服务器B上的/test/getstring。

@RequestMapping(value = "/test/getstring", method = RequestMethod.GET)
@ResponseBody
public String getString() {
    return "http:///test.dns";
}

在远程服务器 A 上运行 rpe.getBody() 的结果是“{}http://test.d”。这当然是错误的并且不起作用。

这是代码:

  • 在远程 websphere 服务器 A 和 B 上运行时,结果正确 (http://test.dns)
  • 使用 intellij/tomcat 在本地运行 A 和 B 时结果正确
  • 当运行 A 本地和 B 远程时,结果正确
  • 运行 A 远程和 B 本地时结果正确
  • 从远程 A 到远程 B 执行 curl 时,结果正确

有什么想法会导致这种行为吗?

我也尝试使用 apache httpClient 重写 resttemplate 部分,但结果相同。

服务器 A 有 tomcat 7.0.69 和 java 8 服务器 B 有 tomcat 7.0.69 和 java 7 本地和远程

【问题讨论】:

    标签: java spring http tomcat request


    【解决方案1】:

    您在服务器 b 上使用 @ResponseBody,因此它以 json 格式返回响应

    【讨论】:

    • 好的,但是为什么它在本地和所有其他提到的情况下都有效?同样,当不使用 responseBody 而是使用返回类型 ResponseEntity 时,它也会失败
    • 无法想象它为什么会起作用,但我在这里猜测,它以某种方式丢弃了“{}”,因为它不存在。
    【解决方案2】:

    我最终找到了这种行为的原因。我们使用了一个框架,可以在后台将数据写入响应。我们没有意识到这种行为,并且像往常一样对待控制器方法(使用 responsebodyband 作为返回类型)。该框架不需要控制器方法返回。因此,将 2 个响应写入响应。 结论:我讨厌以不透明的方式自己做事的框架。 (该框架是公司以某种方式获得的内部开发框架)

    【讨论】:

      猜你喜欢
      • 2020-02-01
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多