[英]Send a simple GET request from Quarkus/Java
我想將 DTO 從一個 quarkus 應用程序發送到另一個。 我正在使用 quarkus 作為框架。 我正在尋找類似的東西從 Quarkus/Java 發送一個簡單的 POST 請求
這是針對 POST 我如何使用 GET 在上述帖子的答案中實現 JCompetence 所做的事情。
我對 quarkus 和 REST 很陌生。 我在這兩個項目中的文件是什么?
使用 REST 時,您的代碼流程是什么。
如何從一個應用程序發送 DTO 的一個非常簡單的實現/演示將非常有幫助。 先感謝您。 這對我有很大幫助。
@Abdullah Chaudhry 雖然可以在 GET 請求中發送正文(您的 DTO),但我認為不建議這樣做。 這篇文章 - HTTP GET with request body - 談到了這個。 但是,如果您無論如何都想這樣做,那么這個想法與您給出的 POST 示例完全相同。 您只需要從POST
更改為GET
。
但是,如果您談論的是在 GET 響應的主體上返回 DTO,我想是可以的。
下面我舉一個使用 Quarkus 2.11.1.Final
版本的例子。
此示例顯示如何發送帶有正文的 GET 以及如何使用另一個正文回答 GET。
您可以在這些 Quarkus 指南上找到幫助:
這些類將存在於服務器端和客戶端,它們將是本示例中的 DTO:
public class Account {
public double balance;
}
public class BankClient {
public int age;
public String name;
}
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-reactive-jackson</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-reactive</artifactId>
</dependency>
@Path("/client")
public class ClientResource {
@Path("/account")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getAccount(BankClient bankClient) {
var account = new Account();
account.balance = 123.45;
return Response.status(200).entity(account).build();
}
}
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-reactive-jackson</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-reactive</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client-reactive</artifactId>
</dependency>
quarkus.rest-client.client-api.url=http://localhost:8080
quarkus.rest-client.client-api.scope=javax.inject.Singleton
package org.acme;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
@Path("/client")
@RegisterRestClient(configKey="client-api")
public interface ClientService {
@Path("/account")
@GET
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
Account getByBankClient(BankClient bankClient);
}
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.eclipse.microprofile.rest.client.inject.RestClient;
@Path("/test")
public class ClientResource {
@Inject
@RestClient
ClientService clientService;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response consumeAccount() {
var bankClient = new BankClient();
bankClient.age = 30;
bankClient.name = "John";
var account = clientService.getByBankClient(bankClient);
return Response.status(200).entity(account).build();
}
}
啟動服務器端應用程序
啟動客戶端應用程序
執行客戶端的/test
,例如:
$ curl --verbose http://localhost:8090/test
響應應該是:
* Trying 127.0.0.1:8090...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8090 (#0)
> GET /test HTTP/1.1
> Host: localhost:8090
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: application/json;charset=UTF-8
< content-length: 18
<
* Connection #0 to host localhost left intact
{"balance":123.45}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.