gpt4 book ai didi

java - 如何使用vertx和quarkus发布静态集合

转载 作者:行者123 更新时间:2023-12-02 03:10:50 25 4
gpt4 key购买 nike

我正在使用 Quarkus 构建一个应用程序,它是 vert.x 扩展。现在我想构建一个 REST 端点,它应该传输所有保存的地址。为了在没有反应性数据源的情况下测试这个,我不想创建一个带有示例地址的 ArrayList 并流式传输它们,这样我就可以检查我的测试是否有效。但我不知道如何流式传输集合。

我的实际代码:

    import io.vertx.reactivex.core.Vertx;
import org.reactivestreams.Publisher;

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 java.util.ArrayList;
import java.util.Collection;

@Path("/addresses")
public class AddressResource {
private Collection<Address> adresses;

@Inject private Vertx vertx;

public AddressResource() {
super();
adresses = new ArrayList<>();
}

@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public Publisher<Address> get() {
Address address = new Address();
address.setStreet("590 Holly Street");
address.setCity("Townsend");
address.setState("Ohio");
address.setZip(6794);
adresses.add(address);
adresses.add(address);
adresses.add(address);
adresses.add(address);
adresses.add(address);
adresses.add(address);

// What to do here?
return null;
}
}

这是我的测试:

    import io.quarkus.test.junit.QuarkusTest;
import org.hamcrest.Matchers;
import org.junit.jupiter.api.Test;

import javax.json.bind.JsonbBuilder;
import java.util.ArrayList;
import java.util.List;

import static io.restassured.RestAssured.given;

@QuarkusTest
public class DBServiceTest {

@Test
void testGetAddresses() throws InterruptedException {
given()
.when()
.get("/addresses")
.then()
.statusCode(200)
.body(Matchers.containsInAnyOrder(readTestAdresses().toArray()));
}

private List<Address> readTestAdresses() {
return JsonbBuilder.create()
.fromJson(
this.getClass().getResourceAsStream("test-addresses.json"),
new ArrayList<Address>() {}.getClass().getGenericSuperclass());
}
}
<小时/>

编辑1:我尝试了以下方法:


@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public Publisher<String> get() {
Address address = new Address();
address.setStreet("590 Holly Street");
address.setCity("Townsend");
address.setState("Ohio");
address.setZip(6794);
adresses.add(address);
return Flowable.just("Test 1","Test 2","Test 3");
}

这有效。所以问题一定与地址对象有关。

最佳答案

你可以使用类似的东西

  @GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public Publisher<String> get() {
Address address = new Address();
address.setStreet("590 Holly Street");
address.setCity("Townsend");
address.setState("Ohio");
address.setZip(6794);
return Flowable.just(address, address, address,....).map(a -> yourToString(a));
}

其中 yourToString 是一个将创建正确的字符串表示形式(可能是 json)的方法。

关于java - 如何使用vertx和quarkus发布静态集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56995727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com