Получение 400 неправильных запросов для шаблона отдыха Spring Boot - PullRequest
1 голос
/ 04 марта 2020

У меня есть контроллер покоя, где я пытаюсь получить токен из службы, используя RestTemplate в Spring Boot. Приложение работает нормально, когда я использую Почтальон, но из Java Приложения я получаю 400 Bad Request.

Мой Java Пример:

@PostMapping("/service")
private String generateAuthenticationToken() {

    HttpHeaders authenticationTokenHeaders = new HttpHeaders();
    authenticationTokenHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

    JSONObject sfmcBUCredential = new JSONObject();
    JSONObject sfmcTokenResponseObject;
    sfmcBUCredential.put("grant_type", sfmcConfig.getGrant_type());
    sfmcBUCredential.put("client_id", sfmcConfig.getClient_id());
    sfmcBUCredential.put("client_secret", sfmcConfig.getClient_secret());

    String sfmcBUCredentialString = sfmcBUCredential.toString();

    System.out.println("Values before sending to POST Request are :::" + sfmcBUCredentialString);

    HttpEntity<String> getTokenEntity = new HttpEntity<>(sfmcBUCredentialString, authenticationTokenHeaders);
    System.out.println("Values after sending to POST Request are :::" + getTokenEntity.toString());
    System.out.println("URL is :::" + GET_SFMC_ENDPOINT_URL);

    //String tokenResponse = restTemplate.postForObject(GET_SFMC_ENDPOINT_URL, getTokenEntity, String.class);
    ResponseEntity<String> tokenResponse = restTemplate.exchange(GET_SFMC_ENDPOINT_URL, HttpMethod.POST, getTokenEntity, String.class);

    sfmcTokenResponseObject = new JSONObject(tokenResponse.getBody());
    System.out.println("tokenResponse::::::::" + sfmcTokenResponseObject.getString("access_token").toString());
    return sfmcTokenResponseObject.getString("access_token");

}

Журналы:

Values before sending to POST Request are :::{"grant_type":"client_credentials","client_secret":"c1ae4b4a-498e-46a0-a02e-cd2378cb8db6","client_id":"Y43iLAhr4e0SoJ9KkV4vLKnGhNmS1Y3c"}
Values after sending to POST Request are :::<{"grant_type":"client_credentials","client_secret":"c1ae4b4a-498e-46a0-a02e-cd2378cb8db6","client_id":"Y43iLAhr4e0SoJ9KkV4vLKnGhNmS1Y3c"},[Content-Type:"application/x-www-form-urlencoded"]>
URL is :::https://keycloak.lab.hci.aetna.com/auth/realms/master/protocol/openid-connect/token

1 Ответ

0 голосов
/ 04 марта 2020

Попробуйте что-то вроде этого:

RestTemplate restTemplate = new RestTemplate();

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("grant_type", sfmcConfig.getGrant_type());
map.add("client_id", sfmcConfig.getClient_id());
map.add("client_secret", sfmcConfig.getClient_secret());

HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(map, headers);

ResponseEntity<LabelCreationResponse> response =
    restTemplate.exchange("url",
                          HttpMethod.POST,
                          entity,
                          String.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...