我和R2DBC一起使用了泽西和网络流量。通过邮递员发送邮件后,我收到一条消息:“无法构造reactor.core.publisher.Mono实例”
这是我的JerseyConfiguration:
@Component
public class JerseyConfiguration
extends ResourceConfig {
public JerseyConfiguration() {
register(ProductController.class, 1);
}
}这位是我的主计长
@Path("/v1")
@Controller
public class ProductController {
@Autowired
private ProductService productService;
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/product")
public Mono<Product> createProduct(@RequestBody Mono<Product> productMono){
return productMono.flatMap(this.productService::createProduct);
}
}这是我的服务:
@Service
public class ProductService {
@Autowired
private ProductRepository repository;
public Mono<Product> createProduct(final Product product){
return this.repository.save(product);
}
}这也是我的pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>io.r2dbc</groupId>
<artifactId>r2dbc-postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>现在,这是我的问题,我从邮递员那里得到一条消息:
Cannot construct instance of `reactor.core.publisher.Mono` (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1, column: 1]请告诉我如何解决那个问题。
谢谢
发布于 2022-10-02 20:03:00
你不能把WebFlux和泽西混为一谈。你应该选择一个或另一个,而不是两者兼而有之。它们都提供了HTTP服务器引擎,但是:
如果您查看Spring Boot参考文档,第3.5节: Web,您将看到泽西是可用的引擎之一,它与其他可能的引擎竞争,即Web和webflux(Web通量)。
因此,答案是:泽西与Webflux不兼容,您必须在和Spring注释之间进行选择,或者选择泽西和Jax_RS,而不使用Mono/Flux作为返回类型。
注1:您应该使用@RestController with对类进行注释,以便它理解方法返回是HTTP主体(详见参考文件最后一段第1.4.1节: )。
注2:如果您真的想使用jersey,但仍然需要使用来自您系统其他部分的Mono对象,您可以使用反应堆提供的转换函数之一来返回泽西可以使用的对象。例如,在Mono对象上,您将找到一个toFuture()方法。您也可以阻止(),但这可能很危险。
https://stackoverflow.com/questions/73928140
复制相似问题