Spring MVC - вызов службы отдыха из другой службы отдыха

В настоящее время у меня действительно странная проблема с вызовом одного REST-сервиса из другого, и я действительно могу использовать руку, чтобы понять, что я делаю неправильно.

Итак, сначала немного контекста:

У меня есть веб-приложение, которое вызывает службу REST для создания учетной записи пользователя (ради этого объяснения конечной точкой является localhost: 8080 / register). Ранее в пути пользователя я вызвал другой сервис для создания учетных данных пользователя.localhost:8090/signup но мне нужно проверить несколько вещей в вызове / зарегистрироваться, поэтому внутри вызова я обращаюсь к другой конечной точке на 8090, чтобы получить эту информацию (localhost:8090/availability). Короче говоря, веб-приложение вызывает localhost: 8080 / register, который, в свою очередь, вызываетlocalhost:8090/availability.

Когда я вызываю конечную точку доступности напрямую из клиента REST или из самого веб-приложения, все работает как положено, но по какой-то странной причине, когда я вызываю ее изнутри вызова конечной точки регистра, я получаю HTTP415. У кого-нибудь есть понимание того, что происходит не так?

Контроллер регистра выглядит так:

@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
public UserModel createUser(@RequestBody UserModel userModel) throws InvalidSignupException {

    // a load of business logic that validates the user model

    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<Boolean> response = restTemplate.postForEntity("http://localhost:8090/availability",
            userModel.getUsername(), Boolean.class);
    System.out.println(response.getBody());

    // a load more business logic

    return userModel;
}

И контроллер доступности выглядит так:

@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
public Boolean isUsernameAvailable(@RequestBody String username) {

    // a load of business logic that returns a boolean
    return Boolean.TRUE;
}

Полное раскрытие - на практике то, что я показал как содержимое createUser (), на самом деле представляет собой несколько вызовов стека вызовов, используя тот же класс, который я использую для вызова сервисов из веб-приложения (что прекрасно работает в этом контексте) и я на самом деле не просто возвращаю true в isUsernameAvailable (потому что это было бы глупо), но это самая простая версия кода, которая повторяет проблему.

Мое текущее предположение состоит в том, что я делаю что-то, что я собираюсь опрокинуть, когда увижу это, но я слишком долго смотрел на этот код, чтобы больше его видеть.

редактировать Комментарий Викдора ниже решил эту проблему для меня. Я изменил метод createUser на:

@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
public UserModel createUser(@RequestBody UserModel userModel) throws InvalidSignupException {

    // a load of business logic that validates the user model

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setMessageConverters(Arrays.asList(new MappingJackson2HttpMessageConverter()));
    ResponseEntity<Boolean> response = restTemplate.postForEntity("http://localhost:8090/availability",
            userModel.getUsername(), Boolean.class);
    System.out.println(response.getBody());

    // a load more business logic

    return userModel;
}

Ответы на вопрос(2)

Ваш ответ на вопрос