简体   繁体   中英

RestTemplate POST with query parameter without request body

I am trying a POST method with RestTemplate. I need my request to have only 1 query parameter, without body (eg localhost:8080/predictions/init?date=xxxx ).

My current code is the following :

String url = "http://localhost:8080/predictions/init";
String dateToGenerate = "xxxx";

MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
Map map = new HashMap<String, String>();
map.put("Content-Type", "application/json");
headers.setAll(map);

Map req_payload = new HashMap();
req_payload.put("date", dateToGenerate);

HttpEntity<?> request = new HttpEntity<>(req_payload, headers);
restTemplateApi.postForEntity(url, request, String.class);

The side of the REST controller I'm trying to call is the following :

 @PostMapping
 @ResponseStatus(HttpStatus.OK)
 public PredictionGenerated initializeOnePrediction(@RequestParam @NotEmpty String date) { 
      .............................
      .............................
 }

I'm currently receiving org.springframework.web.client.HttpClientErrorException: 400 null .

Any ideas?

If you have any many query param then set all in Multiple value Map as below.

MultiValueMap<String, String> param= new 
LinkedMultiValueMap<String, String>();
param.put("date", datevalue);

Then create Http header add required content.

HttpHeaders headers = new HttpHeaders()
header.setContentType("application/json");

Create the URL as below.

URI  url = UriComponentsBuilder.fromHttpUrl(base url)
    .queryParams(param)
    .build();

HttpEntity<?> request = new HttpEntity<>(req_payload, 
headers);
restTemplateApi.postForEntity(url, request, String.class);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM