我有一个Sprint Boot 2应用程序,该应用程序使用RestTemplate调用名为ForgeRock的第三方产品的外部Web服务。它使用标题发送参数(不是我的主意)而不是正文。尝试发布请求时,我始终收到错误400。该正文应为空,我尝试发送null和“ {}”,结果相同。仅供参考,调试时,我的authenticate方法现在返回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;
}
答案 0 :(得分:0)
我只收到400错误请求,这意味着JSON有问题。但是,我发现根本的错误实际上是来自ForgeRock,我没有发送FQDN(我正在发送IP)。因此,如果发送FQDN,则代码按原样工作。