我需要向一个我从一开始就不确定的端点发出发布请求,并且只有在我收到有效负载之后才知道:
messageBody.getCallbackUri()
你知道java spring中的解决方案吗,因为我尝试使用fiegn客户端,但它需要一个基本url,但我需要根据我收到的有效负载设置该url:
@Slf4j
@Service
@RequiredArgsConstructor
public class NotifyService {
private final FClient fClient;
public void notify(
String postPayload, OrderDto messageBody, int numberOfAttempts) {
log.info(
"Posting payload "
+ postRequestPayload
+ "to"
+ messageBody.getCallbackUri()
+ "..."
+ "attempting "
+ numberOfAttempts
+ " times");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
for (int i = 1; i <= numberOfAttempts; i++) {
try {
log.info("Trying Post request, attempt number-" + i);
ResponseEntity<String> response =
fClient.postCallback(messageBody.getUri(), postPayload, headers);
log.info("Attempt " + i + ": Response code: " + response.getStatusCodeValue());
if (response.getStatusCode().is2xxSuccessful()) {
break; // Break the loop if successful response
}
} catch (RestClientException restClientException) {
log.error("Post request unsuccessfully", restClientException);
}
}
}
}
@FeignClient(name = "Client", url = "your-service-url")
interface FClient {
@PostMapping
ResponseEntity<String> postCallback(
@RequestParam("Uri") String callbackUri,
@RequestBody String postPayload,
@RequestHeader HttpHeaders headers)
}
看到 url 附加了 your-service-url,但我只需要向 messageBody.getUri() 发帖
谢谢
您可以使用名为“forest”的框架 你可以在maven仓库中搜索它。 例如
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-spring-boot-starter</artifactId>
<version>1.5.28</version>
</dependency>
此链接上的文档 https://forest.dtflyx.com/
您可以使用以下代码作为演示
/
**
* 若全局变量中已定义 baseUrl 和 accept,
* 便会将全局变量中的值绑定到 @BaseRequest 的属性中
*/
@BaseRequest(
baseURL = "${baseUrl}", // 默认域名
headers = {
"Accept:${accept}" // 默认请求头
}
)
public interface MyClient {
// 方法的URL的域名将会引用全局变量中定义的 baseUrl
@Get("{url1}")
String send1(@Query("url1") String username),@Query("username") String username);
}