Как передать заголовки и тело запроса в запрос POST? - PullRequest
0 голосов
/ 25 января 2020

Я использую метод RestTemplate restTemplate.exchange для запроса POST к конечной точке. У меня есть OAuth Header и HttpEntity в другом файле, который я хочу передать в запрос POST, в дополнение к этому я также хочу передать request в конечную точку.

Мне удалось успешно передать заголовки и запрос, но не сущность Http, которая содержит учетные данные

 ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.POST,
                new HttpEntity<>(request, dataRepo.getHeader()), String.class);

Можно ли как-нибудь передать все 3 вещи

  1. HttpEntity

  2. HttpHeaders

  3. запрос

Вот мой код

@RunWith(MockitoJUnitRunner.class)
@TestPropertySource
public class DataTest {
    @Inject
    private Oauth oauth;

    @Mock
    private DataRepo dataRepo;
    RestTemplate restTemplate = new RestTemplate();

    @Qualifier(OAuth2HttpHeadersBuilder.BEAN_NAME)
    NewHttpHeader headersBuilder;

    @Test
    public void testAddEmployeeSuccess() throws URISyntaxException {

        URI uri = new URI(url);
        Set<String> mockData = Stream.of("A","B").collect(Collectors.toSet());
        String onsString = String.join(",", mockData);

        Map<String, String> requestBody = new HashMap<>();
        requestBody.put("name", onsString);
        JSONObject jsonObject = new JSONObject(requestBody);

        HttpEntity<String> request = new HttpEntity<>(jsonObject.toString(), null);

        ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.POST,
                new HttpEntity<>(request, dataRepo.getHeader()), String.class);

        Assert.assertEquals(201, result.getStatusCodeValue());
    }

Приведенный ниже код находится в файле NewHttpHeader. java файл, содержащий Header и HttpEntity

     private HttpEntity<MultiValueMap<String,String>> getHttpEntity() {
            MultiValueMap<String, String> store = new LinkedMultiValueMap<>();
            store.add( "pas", "password" );
            store.add( "name", config.getVaultServiceAccountName() );
            return new HttpEntity<>( store, getHeader() );
        }


        private HttpHeaders getHeader() {
            HttpHeaders httpHeaders = headersBuilder.build();

            httpHeaders.add( HttpHeaders.ACCEPT, ContentType.APPLICATION_JSON.getMimeType() );
            httpHeaders.add( HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_FORM_URLENCODED.getMimeType() );

            return httpHeaders;
        }
    }

1 Ответ

0 голосов
/ 25 января 2020

Цитирующий вопрос:

Можно ли как-нибудь передать все 3 вещи

  1. HttpEntity
  2. HttpHeaders
  3. request

Цитирование javado c из HttpEntity:

Представляет HTTP запрос или объект ответа, состоящий из заголовков и body .

Итак, ответ на ваш вопрос: Да , вы можете пройти все 3, так как первый - не что иное, как комбинация двух других.

Просто объедините два HttpEntity объекта.

До

HttpEntity<String> request = new HttpEntity<>(jsonObject.toString(), null);

ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.POST,
        new HttpEntity<>(request, dataRepo.getHeader()), String.class);

После

HttpEntity<String> request = new HttpEntity<>(jsonObject.toString(), dataRepo.getHeader());

ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.POST,
        request, String.class);
...