Запрос GET работает в Почтальоне, но не с SpringBoot RestTemplate - PullRequest
2 голосов
/ 26 марта 2020

У меня есть два приложения Spring Boot. Одним из них является клиент отдыха, который делает вызовы отдыха. Другое приложение, которое имеет только конечную точку отдыха.

Когда клиент Rest достигает конечной точки отдыха, происходит сбой.

Этот код используется для достижения конечной точки отдыха:

HttpHeaders headers = new HttpHeaders();
headers.set(ACCEPT, APPLICATION_JSON);
headers.set(CONTENT_TYPE, APPLICATION_JSON);
HttpEntity entity = new HttpEntity(headers);

UriComponentsBuilder builder = UriComponentsBuilder
    .fromHttpUrl(url)

    .queryParam(EMAIL, URLEncoder.encode(email, "UTF-8"))
    .queryParam(ADDRESS, URLEncoder.encode(address, "UTF-8"));

ResponseEntity<Address> response = 
commonRestTemplate
    .exchange(builder.toUriString(), 
HttpMethod.GET, entity, Address.class);

Это конечная точка отдыха, к которой пытается обратиться клиент:

@RestController
@AllArgsConstructor
public class AddressController {
    private final RestTemplate commonRestTemplate;

    // constructor and other rest endpoints


    @RequestMapping(value = "/", method = RequestMethod.GET)
    public @ResponseBody ResponseEntity<Address> getAddress(@RequestParam String email, @RequestParam String address) {
        try {
            // do soemthing
        } catch (RuntimeException e) 
        {
            LOGGER.error(e.getMessage(), e);
            return status(HttpStatus.INTERNAL_SERVER_ERROR).build();
        }
   }
}

Это ошибка, которую я вижу в приложении с конечной точкой отдыха:

2020-03-26 16:33:53.619  WARN 9 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'address' is not present]

2020-03-26 16:50:02.691 ERROR 9 --- [nio-8080-exec-9] u.c.h.s.s.controller.AddressController      : Key may not be empty

Почему Вызов остальных работает с Почтальоном, но не с моим клиентом отдыха?

Я также пытался с и без кодирования специальных символов в клиенте отдыха без удачи. Кажется, я не вижу, чего мне не хватает

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

может быть 2 проблемы:

  1. stati c АДРЕС правильно определен и ссылается на «адрес».
  2. еще один, значение адреса не равно нулю. выведите значение адреса перед вызовом restTemplate.
0 голосов
/ 26 марта 2020

Попробуйте изменения ниже

UriComponentsBuilder builder = UriComponentsBuilder .fromHttpUrl(url)
<br> .queryParam("email", URLEncoder.encode(email, "UTF-8"))
<br> .queryParam("address", URLEncoder.encode(address, "UTF-8"));

@RestController
@AllArgsConstructor
public class AddressController {
private final RestTemplate commonRestTemplate;

// constructor and other rest endpoints


@RequestMapping(value = "/", method = RequestMethod.GET)
public @ResponseBody ResponseEntity<Address> getAddress(@RequestParam("email") String email, @RequestParam("address") String address) {
    try {
        // do soemthing
    } catch (RuntimeException e) 
    {
        LOGGER.error(e.getMessage(), e);
        return status(HttpStatus.INTERNAL_SERVER_ERROR).build();
    }
 }
}
...