SOAP+Quarkus Reactive响应:当使用Mutiny返回类型时,Quarkus是否支持XML解析



我不知道Quarkus是否支持XML(反(序列化,而响应是响应类型(Uni/Multi(。我使用了Spring Reactor,在Reactor中,响应应该始终是Mono/Flux,以使从请求到客户端再到最终响应的整个管道不阻塞。这是正确的方式吗?我只看到返回int/String/List的例子,而没有看到Uni/Multi的响应。

我对官方的例子做了一点修改,以确认这是可能的,但我没有得到适当的回应。

@Inject
private PrimeService primeService;
@GET
@Path("/{number}")
@Timed
@Produces(MediaType.APPLICATION_XML)
public Uni<OutputDto> checkIfPrime(@PathParam long number) {
return primeService.checkPrime(number);
}

我的服务:

@ApplicationScoped
public class PrimeService {
private long highestPrimeNumberSoFar = 2;
Uni<OutputDto> checkPrime(long number) {
return Uni.createFrom().item(number)
.map(this::calculate)
.map(message -> new OutputDto(message, LocalDate.now()));
}
private String calculate(long number) {
if (number < 1) {
return "Only natural numbers can be prime numbers.";
}
if (number == 1) {
return "1 is not prime.";
}
if (number == 2) {
return "2 is prime.";
}
if (number % 2 == 0) {
return number + " is not prime, it is divisible by 2.";
}
for (int i = 3; i < Math.floor(Math.sqrt(number)) + 1; i = i + 2) {
if (number % i == 0) {
return number + " is not prime, is divisible by " + i + ".";
}
}
if (number > highestPrimeNumberSoFar) {
highestPrimeNumberSoFar = number;
}
return number + " is prime.";
}
}

当我像curl -X GET http://localhost:8080/45646546546541一样查询时,我看到:

Could not find MessageBodyWriter for response object of type: io.smallrye.mutiny.operators.uni.UniOnItemTransform of media type: application/xml;charset=UTF-8

我的依赖项中有io.quarkus:quarkus-resteasy-jaxb

<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jaxb</artifactId>
<version>1.13.7.Final</version>
</dependency>

我想:

  • 通过配置属性配置XML解析器功能
  • 能够将Uni/Multi转换为XML

好吧,我只是发现除了quarkus-resteasy-jaxb之外,我还需要添加这个依赖项:<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-mutiny</artifactId> </dependency>

在返回Uni<OutputDto>时,我看到了XML响应。

因此jaxb进行序列化,resteasy mutity进行转换

不,根据医生的说法,这是不推荐的。查看注释以查看正确的解决方案。

相关内容

最新更新