POST с использованием RestTemplate, параметров запроса и тела запроса - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь освоить RestTemplate и для этого сделал два тестовых подпружиненных приложения: клиент и сервер.Попробовал несколько примеров на Google, прежде чем спрашивать здесь, и извините за дубликат сообщения, если я пропустил его.

@Slf4j
@RestController
public class ServerController {

@PostMapping("/post")
@ResponseBody
public Resource post(@RequestBody Map<String, String> body,
                     @RequestParam(name = "path", defaultValue = "NAN") String path) {

    if (!body.get("key").equalsIgnoreCase("valid")){
        return Resource.builder().ip("'0.0.0.0").scope("KEY NOT VALID").serial(0).build();
    }

    switch (path) {
        case "work":
            return Resource.builder().ip("115.212.11.22").scope("home").serial(123).build();
        case "home":
            return Resource.builder().ip("115.212.11.22").scope("home").serial(456).build();
        default:
            return Resource.builder().ip("127.0.01").scope("local").serial(789).build();
    }
}

}

А вот мой ClientController

@Slf4j
@RestController
public class ClientController {

@GetMapping("/get")
public Resource get() {
    String url = "http://localhost:8085/post";
    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.setAccept(Arrays.asList(MediaType.MULTIPART_FORM_DATA));
    httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
    MultiValueMap<String, String> body = new LinkedMultiValueMap<>();
    body.add("key", "valid");
    HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(body, httpHeaders);
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<Resource> response = restTemplate.exchange(url, HttpMethod.POST, entity, Resource.class, Collections.singletonMap("path", "home"));
    return response.getBody();
}

}

В ClientController я пытаюсь имитировать то, что я сделал в Почтальоне, но без удачи.

Почтальон PrintScreen

Что я делаю не так?Спасибо!

1 Ответ

0 голосов
/ 10 июня 2018

удалось выяснить это.Пришлось рефакторинг как это

@GetMapping("/get")
public Resource get(){
    String url = "http://localhost:8085/post";

    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.setContentType(MediaType.APPLICATION_JSON);

    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
            .queryParam("path", "home");

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

    HttpEntity<Map<String, String>> request = new HttpEntity<Map<String, String>>(Collections.singletonMap("key", "valid"), httpHeaders);

    Resource resource = restTemplate.postForObject(builder.toUriString(), request, Resource.class);

    return resource;
}
...