Spring MVC - Chamando um serviço de descanso de dentro de outro serviço de descanso

No momento, estou tendo um problema muito estranho ao chamar um serviço REST de dentro de outro e eu realmente poderia ajudar a descobrir o que estou fazendo de errado.

Então, primeiro, um pouco de contexto:

Eu tenho um aplicativo da web que solicita um serviço REST para criar uma conta de usuário (para fins desta explicação, o terminal é localhost: 8080 / register). No início da jornada do usuário, chamei um serviço diferente para criar as credenciais de login do usuáriolocalhost:8090/signup mas preciso verificar algumas coisas na chamada para / registrar, de modo que, dentro da chamada, estou chamando para um terminal diferente no 8090 para obter essas informações (localhost:8090/availability) Para encurtar a história, o webapp chama localhost: 8080 / register que, por sua vez, chamalocalhost:8090/availability.

Quando ligo diretamente para o endpoint de disponibilidade, de um cliente REST ou do próprio webapp, tudo funciona como esperado, mas por algum motivo estranho, quando ligo de dentro da chamada para o endpoint de registro, recebo um HTTP415. Alguém tem alguma idéia do que está errado?

O controlador de registro fica assim:

@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;
}

E o controlador de disponibilidade fica assim:

@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;
}

Divulgação completa - na prática, o que mostrei como o conteúdo de createUser () são na verdade várias chamadas na pilha de chamadas, usando a mesma classe que eu uso para chamar os serviços do aplicativo da Web (que funciona perfeitamente nesse contexto) , e na verdade não estou apenas retornando true em isUsernameAvailable (porque isso seria bobo), mas esta é a versão mais simples do código que replica o problema.

Minha suposição atual é que estou fazendo algo que vou me expulsar quando o vir, mas estou encarando esse código há muito tempo para poder vê-lo mais.

Editar O comentário de Vikdor abaixo resolveu esse problema para mim. Alterei o método createUser para:

@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;
}

questionAnswers(2)

yourAnswerToTheQuestion