我想使用 REST API 将用户添加到 RabbitMQ 中的默认
/
虚拟主机。
我正在执行以下端点:
PUT http://localhost:15672/api/permissions/%2F/user.name
我得到:
400 Bad Request: "{"error":"bad_request","reason":"vhost_or_user_not_found"}"
%2F
编码为默认虚拟主机名:/
。
虚拟主机
/
存在于RabbitMQ中:
这也很有趣,因为当我执行相同的端点但使用不同的虚拟主机名时,它可以工作:
http://localhost:15672/api/permissions/ble/user.name
你有什么想法吗?
谢谢你。
问题在于
RestTemplate
正在对您的网址进行编码。这意味着发送请求时%2F将被进一步编码,使其无法被rabbitMQ识别。
为了避免这种情况,您可以使用
DefaultUriBuilderFactory
强制 RestTemplate
不对网址进行编码。
DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory();
uriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
restTemplate.setUriTemplateHandler(uriBuilderFactory);
restTemplate.exchange(
rabbitBaseUrl + "/api/permissions/%2F/" + username,
HttpMethod.PUT,
new HttpEntity<>(permissionsObjectNode, headers),
Void.class
);