1

我有一个 Sprint Boot 2 应用程序,它使用 RestTemplate 为名为 ForgeRock 的第三方产品调用外部 Web 服务。它使用标头而不是正文来发送参数(不是我的想法)。尝试发布请求时,我不断收到错误 400。正文应该是空的,我尝试发送具有相同结果的 null 和“{}”。仅供参考,我的身份验证方法在调试时暂时返回 null。

@PostMapping
public String authenticate(@RequestBody User user) {
  RestTemplate restTemplate = new RestTemplate();
  try {
      HttpHeaders headers = createHttpHeaders(user.getUsername(), user.getPassword());
      HttpEntity<String> entity = new HttpEntity<>(null, headers);

      ResponseEntity<String> responseEntity = restTemplate.exchange(authenticateUrl, HttpMethod.POST, entity, String.class);
      System.out.println("RESPONSE: " + responseEntity.getBody());
  } catch (Exception ex) {
      ex.printStackTrace();
  }
  return null;
}


private HttpHeaders createHttpHeaders(String user, String password) {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.add("X-OpenAM-Username", user);
    headers.add("X-OpenAM-Password", password);
    headers.add("Accept-API-Version", "resource=1.1");
    return headers;
}
4

1 回答 1

0

我只收到 400 错误请求,我认为这意味着 JSON 存在问题。但是,我发现根本错误实际上来自 ForgeRock,我没有发送 FQDN(我正在发送 IP)。因此,如果发送 FQDN,代码将按原样工作。

于 2018-07-10T16:10:02.877 回答