javaspring-boottesting

I am using TestRestTemplate to Test with @RequestParam value how to execute


how to send @RequestParam value to url

@ApiRestController
public class CityController extends BaseController{

    @GetMapping("/cities")
    public ResponseEntity<CitiesResponse> getAll(
            @RequestParam(value = "pageNumber", defaultValue = "1") int pageNumber,
            @RequestParam(value = "pageSize", defaultValue = "100") int pageSize,
            @RequestParam(value = "sortBy", defaultValue = "id", required = false) String sortBy,
            @RequestParam(value = "sortDirection", defaultValue = "asc", required = false) String sortDirection,
            @RequestParam(value = "search", required = false) String search) {
        return new ResponseEntity(cityService.getAll(pageNumber, pageSize, sortBy, sortDirection, search), HttpStatus.OK);
    }
}

Solution

  • To easily manipulate URLs / path / params / etc., you can use Spring's UriComponentsBuilder class. It's cleaner that manually concatenating strings and it takes care of the URL encoding for you:

    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
            .queryParam("pageNumber", 1)
            .queryParam("pageSize", 10)
            .queryParam("sortBy", "id")
            .queryParam("sortDirection", "desc")
            .queryParam("search", "hello search");
    
    HttpEntity<?> entity = new HttpEntity<>(headers); //Update this as per your code
    
    HttpEntity<String> response = restTemplate.exchange(
            builder.build().encode().toUri(), 
            HttpMethod.GET, 
            entity, 
            String.class);