Отправить пользовательские заголовки RestTemplate - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь установить пользовательский заголовок для моих RestTemplate запросов.Я использую Spring Boot 2.0.6.RELEASE

Я пытаюсь установить их так, внутри моего публичного метода

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("muh Header", "muh value");

Каждый раз, когда я пытаюсь это сделать, генерируется следующая ошибка

'HttpHeaders(java.util.Map<java.lang.String,java.util.List<java.lang.String>>)' has private access in 'java.net.http.

Я понимаю, что сообщение об ошибке означает, что я пытаюсь создать экземпляр частного класса вне класса, в котором объявлен закрытый класс.

Итак, каков наилучший курс действий?

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Я бы пошел с чем-то вроде этого:

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class WebController {
    private static final String template = "Hello, %s!";

    @RequestMapping("/greeting")
    public ResponseEntity<String> greeting(@RequestParam(value="name", defaultValue="World") String name){
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.add("thisiskey", "this is value");
        return new ResponseEntity<>(name, headers, HttpStatus.ACCEPTED);
    }
}

enter image description here

Указывает на размышления:

  1. Как часто вы хотите добавить пользовательский заголовок и как часто они меняются?Если это применимо только к одному или двум, вы можете рассмотреть эту опцию, однако, если это более чем в два раза, я бы предложил использовать перехватчик http.

  2. header.add ("","") -> который реализует MultiValueMap не принимает header.add ("ключ mua", "...") -> так как в ключе есть пробел.

0 голосов
/ 24 октября 2018

Пакет, который вы используете, неверен, чтобы добавить заголовки при использовании Spring restTemplate, вы должны использовать org.springframework.http.HttpHeaders.HttpHeaders вместо java.net.http.HttpHeaders, последний - то, что вы пытаетесь использовать.

Вот фрагмент кода, который добавляет заголовки запроса.

// request resource
HttpHeaders headers = new HttpHeaders();
headers.set("headerName", "headerValue");

HttpEntity entity = new HttpEntity(headers);

ResponseEntity<String> response = restTemplate.exchange("some url", HttpMethod.GET, entity, String.class);
0 голосов
/ 24 октября 2018

Вы можете создать перехватчик, который будет перехватывать все запросы, отправленные шаблоном rest, и добавлять настраиваемые заголовки следующим образом:

public class TokenAuthorizationInterceptor implements ClientHttpRequestInterceptor {
    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
            throws IOException {
        request.getHeaders().add("ContentType", MediaType.APPLICATION_JSON);
        request.getHeaders().add("muh Header", "muh value");
        return execution.execute(request, body);
    }

}

this.restTemplate = new RestTemplate();
this.restTemplate.getInterceptors().add(new TokenAuthorizationInterceptor());

Это будет работать нормально, если вы хотите добавить одинаковые настраиваемые заголовки ко всемваши запросы отправлены через этот шаблон отдыха.Одно из преимуществ этого подхода заключается в том, что пользовательские заголовки HTTP можно устанавливать только в одном месте, а не везде, где вы отправляете запрос.

...