Erro ao fazer requisição POST

Tenho o código abaixo:

String url = new StringBuilder().append("https://...").toString();
Map<String, Map<String, String>> body = buildBotBody(email,message);
restTemplate.postForEntity(url, body, Void.class);

Essa requisição não precisa de autenticação, ou seja não tem login e senha. Fazendo essa requisição no Postman funciona perfeitamente. Mas quando executo o código acima, obtenho o erro abaixo:

401 Unauthorized

Como está o curl desta request no postman?

voce colocou spring-security ao projeto?
se nao colocou, coloque @CrossOrigin ao metodo.

caso tenha ativado o spring-boot, precisa colocacar também na configuracao do spring security isso aqui

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.cors();
	}

Não coloquei spring-security ao projeto.

No caso eu preciso colocar essa anotação @CrossOrigin ao método que está fazendo a requisição?

Eu coloquei essa anotação @CrossOrigin acima do método que faz a requisição, mas não funcionou.

Eu coloquei no Controller, mas não funcionou.

era so isso mesmo para funcionar. pq quando a requisicao sai do browser precisa habilitar o cors. no postman voce nao tera problemas. tenta tirar o https, usa so o http mesmo

apena com http, não funciona no Postman.

curl é um formato de requisição que o postman permite gerar, queria ver essa informação pra sugerir o que poderia estar faltando no seu código!

Mas pelo que você me disse, acredito que falte algum header, verifique todos os cabeçalhos que a request contém no postman e aplique na sua chamada do restTemplate!

eu coloquei uma api no heroku, sem spring-security security e funciona bl. O client é react. No seu caso deve estar faltando colocar algum header na requisicao

@RestController
@RequestMapping(value = "/aniversariantes")
public class AniversariantesController {

	@Autowired
	private AssistidoService pessoaService;

	@GetMapping
	@ResponseStatus(value = HttpStatus.OK)
	@CrossOrigin
	public ResponseEntity<List<Assistido>> listarAniversariantes(Integer mes) {
		return ResponseEntity.ok().body(pessoaService.listarAniversariantes(mes));
	}

}

eu ate havia colocado o spring-security mas esta desativado.

@EnableWebSecurity
@ComponentScan(basePackageClasses = TokenAuthenticationService.class)
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

	@Override
    protected void configure(HttpSecurity http) throws Exception {
		http.csrf().disable().authorizeRequests().antMatchers("/**").permitAll();
    }

}

Na sua request você está passando todos os parâmetros corretamente?

Analisando pelo curl que me enviou, acredito que você não esteja fornecendo todos os parâmetros da requisição, por este motivo ocorre o erro 401!

Parâmetros necessários:

api-version: 2016-06-01                           /*Sem ele causa um 400*/
sp: %2Ftriggers%2Fmanual%2Frun                    /*Sem ele causa um 400*/
sv: 1.0                                           /*Sem ele causa um 400*/
sig: zxm46aQnBj3ZTKPOddnnwUgtQZoQcQfixNtXVxAJjPg  /*Sem ele causa um 401*/

Mas esses parâmetros estão na url.

Eu teria que setar esses parâmetros separadamente?

Fiz um main com o resumo do código para ficar mais fácil testar:

try {
		HttpHeaders requestHeaders = new HttpHeaders();
		requestHeaders.add("Accept",MediaType.ALL_VALUE);
		requestHeaders.setContentType(MediaType.APPLICATION_JSON);
		HttpEntity<?> requestEntity = new HttpEntity<>(requestHeaders);
		String url = new StringBuilder().append("https://prod-12.westeurope.logic.azure.com:443/workflows/fbf4c29cbcad4679b1a1159fff7b07f9/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=zxm46aQnBj3ZTKPOddnnwUgtQZoQcQfixNtXVxAJjPg").toString();
		RestTemplate rest = new RestTemplate();
		rest.exchange(url, HttpMethod.POST, requestEntity, Void.class);
		logger.info("Bot enviado com sucesso!");
	} catch (RestClientException e) {
		logger.error("Erro ao enviar Bot.", e);
		throw e;
	}

No log do console está assim:

21:58:20.025 [main] DEBUG org.springframework.web.client.RestTemplate - HTTP POST https://prod-12.westeurope.logic.azure.com:443/workflows/fbf4c29cbcad4679b1a1159fff7b07f9/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%252Ftriggers%252Fmanual%252Frun&sv=1.0&sig=zxm46aQnBj3ZTKPOddnnwUgtQZoQcQfixNtXVxAJjPg
21:58:20.301 [main] DEBUG org.springframework.web.client.RestTemplate - Accept=[application/json, application/*+json]
21:58:23.020 [main] DEBUG org.springframework.web.client.RestTemplate - Response 401 UNAUTHORIZED

Tentei com queryparams e também com querys parametrizadas, mas não funcionou.

É bem estranho este comportamento, muito provavelmente é algo com o formato em que o restTemplate envia a request, pois não faz sentido a mesma request que funciona no postman falha na aplicação!