6

Ref: org.springframework.web.util.UriBuilder

I am using UriBuilder to build a URI for an endpoint

final String response = myWebClient.get() .uri(uriBuilder -> uriBuilder.scheme("https").path("example.com/mypage").path("/{id}.xml").build(id)) .header(AUTHORIZATION, getAuthorizationHeaderValue(username, password)) .accept(MediaType.TEXT_XML) .retrieve() .bodyToMono(String.class) .block(); 

However, I already have the value https://example.com/mypage in a string variable(fetched from the database). Can I use this string directly instead of specifying the scheme and path/host separately? Right now I am splitting the main string into individual parts manually.

1 Answer 1

12

You can use UriComponentsBuilder to build an URI :

URI uri = UriComponentsBuilder.fromHttpUrl("https://example.com/mypage").path("/{id}.xml").build(id); myWebClient.get() .uri(uri) .header(AUTHORIZATION, getAuthorizationHeaderValue(username, password)) .... 

Alternatively, if the HTTP requests that you need to sent out have some common settings(i.e. base url and Authorization header in your case) , you can configure them at the WebClient.Builder level. The WebClient build by this builder will be configured with these common setting by default such that you do not need to configure them again and again for each HTTP request. Something like:

@Component public class ExampleComClient { private final WebClient webClient; @Autowired public ExampleComClient(WebClient.Builder builder) { this.webClient = builder.baseUrl("https://example.com/mypage") .defaultHeader(AUTHORIZATION, getAuthorizationHeaderValue(username, password)) .build(); } public String getById(Integer id){ return webClient.get() .uri(uriBuilder -> uriBuilder.path("/{id}.xml").build(id)) .accept(MediaType.TEXT_XML) .retrieve() .bodyToMono(String.class) .block(); } public String getByName(String name){ return webClient.get() .uri(uriBuilder -> uriBuilder.queryParam("name",name).build()) .accept(MediaType.TEXT_XML) .retrieve() .bodyToMono(String.class) .block(); } } 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.