Spring Boot 两个外部包中的Sping Boot Bean名称冲突,无法控制外部代码

tv6aics1  于 2022-12-26  发布在  Spring
关注(0)|答案(1)|浏览(215)

我尝试在Sping Boot 3.0.0中使用两个依赖项

<dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
        <version>2.0.2</version>
    </dependency>
    <dependency>
        <groupId>com.graphql-java-kickstart</groupId>
        <artifactId>graphql-spring-boot-starter</artifactId>
        <version>15.0.0</version>
    </dependency>

问题是它们都有一个名为“objectMapperProvider”的Bean。
一种用于:

[org/springdoc/core/configuration/SpringDocConfiguration.class]

另一种用于:

[graphql/kickstart/autoconfigure/web/servlet/GraphQLWebAutoConfiguration.class]

我得到的错误是:

The bean 'objectMapperProvider', defined in class path resource [org/springdoc/core/configuration/SpringDocConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [graphql/kickstart/autoconfigure/web/servlet/GraphQLWebAutoConfiguration.class] and overriding is disabled.

有没有办法解决这个问题,或者我需要优先考虑并选择更重要的东西来使用。找到另一个解决方案。

nwnhqdif

nwnhqdif1#

这不是对我的问题的回答,而是对我的问题的解决。
使用新的spring-boot-starter-graphql(通过spring!!)代替
java-kickstarters图形库-Spring引导启动程序!

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-graphql</artifactId>
</dependency>

记录于:
https://docs.spring.io/spring-graphql/docs/current/reference/html/#overview
下面通过示例进行详细说明:
https://www.baeldung.com/spring-graphql
https://blog.devgenius.io/graphql-with-spring-boot-starter-graphql-7b406998c0b5
两个例子都遗漏了一个很小但很重要的东西,那就是控制器中的方法名需要与模式中的方法名完全匹配!!
之前可以在模式中使用方法名,如“books”,然后将其与解析器中前缀为“get”的方法匹配。现在必须完全匹配!!或者您需要在@QueryMapping注解中指定名称,如下所示。

//ControllerCode

@QueryMapping(name = "books")
public List<Advisor> getBooks(@Argument String authorName) {
    return bookService.listByAuthorName(authorName);
}
//    Schema code

books(authorName: String!): [Books]

如果模式和相应的方法不匹配,您将不会得到异常,您将只得到空值,即使您将日志设置为跟踪,您也不会发现任何错误!

相关问题