小编Man*_*hek的帖子

Swagger 2.x JaxrsAnnotationScanner 找不到位于 ear 中的资源类

我目前正在尝试使用 swagger 核心来记录现有的 API。我使用swagger core 2.7和resteasy 3,因为我在wildfly 10上部署。我有一个war,其中包含我的rest servlet和一些位于耳朵中的模型类,其中也包含war。模型类使用 @Schema 进行注释,因此需要依赖于 swagger-annotations。我跟着教程https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-configuration

所以我将依赖添加到我的战争的 pom.xml 和注释模块依赖添加到我的包含模型类的模块。它会编译和部署,但是当我浏览到 /myapp/openapi.yaml 时,我会在 Wildfly 控制台中看到我在 web.xml 中定义的每个资源的以下警告(战争中包含的资源除外)

12:52:22,058 警告 [io.swagger.v3.jaxrs2.integration.JaxrsAnnotationScanner](默认任务 5)从资源类加载类时出错:at.prismasolutions.test.render.RPlotFormatParam 来自 [Module "deployment.rserve-test. ear.at.prismasolutions.test.rserve.web-0.0.1-wildfly-SNAPSHOT.war:main”来自服务模块加载器]:java.lang.ClassNotFoundException:at.prismasolutions.test.render.RPlotFormatParam来自[模块“部署.rserve-test.ear.at.prismasolutions.test.rserve.web-0.0.1-wildfly-SNAPSHOT.war:main" from Service Module Loader] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198 ) 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363) 在 org.jboss.modules.ConcurrentClassLoader。performLoadClass(ConcurrentClassLoader.java:351) at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java: 264) 在 io.swagger.v3.jaxrs2.integration.JaxrsAnnotationScanner.classes(JaxrsAnnotationScanner.java:68) 在 io.swagger.v3.oas.integration.GenericOpenApiContext.read(GenericOpenApiContext.java:470) 在 io.swagger.v3 .jaxrs2.integration.resources.BaseOpenApiResource.getOpenApi(BaseOpenApiResource.java:49) 在 io.swagger.v3.jaxrs2.integration.resources.OpenApiResource.getOpenApi(OpenApiResource.java:32) 在 io.swagger.v3.jaxrs2.integration .resources.OpenApiResource$Proxy$_$$_WeldClientProxy.getOpenApi(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun。reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.resteasy .core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:139) at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295) at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(:ResourceMethodInvoker.java) ) 在 …

resteasy swagger wildfly jakarta-ee

7
推荐指数
1
解决办法
986
查看次数

如何在 POST 请求中使用附加 @RequestBody 将 Pageable 传递给 Feign Client

我尝试在 Spring 中为 REST 服务控制器创建一个假客户端。

@PostMapping("/search")
public Page<MeasureDto> searchMeasures(@RequestBody MeasureDto example, Pageable pageable) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

客户端看起来像这样:

@PostMapping("/search")
public Page<MeasureDto> searchMeasures(@RequestHeader("apiKey") String apiKey, @RequestBody MeasureDto example, Pageable pageable);
Run Code Online (Sandbox Code Playgroud)

运行测试时抛出以下异常:

引起原因:java.lang.IllegalStateException:方法有太多主体参数:公共抽象org.springframework.data.domain.Page com.foo.bar.jobservice.client.MeasureServiceClient.searchMeasures(java.lang.String,com.example .foo.jobservice.client.dto.MeasureDto,org.springframework.data.domain.Pageable)

我已经知道/尝试过的:

github上有一个已关闭的问题:https://github.com/spring-cloud/spring-cloud-netflix/issues/556

应该已经解决问题的提交问题:

https://github.com/spring-cloud/spring-cloud-openfeign/issues/26

提交:

https://github.com/spring-cloud/spring-cloud-openfeign/commit/6e0e63644ba34193f03c2cd74391cac73b9bfdb4

我配置了什么:

import feign.codec.Encoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.support.PageJacksonModule;
import org.springframework.cloud.openfeign.support.PageableSpringEncoder;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@EnableFeignClients
@Configuration
public class FeignConfig {

    @Bean
    public PageJacksonModule pageJacksonModule() {
        return new PageJacksonModule();
    }

    @Autowired
    private ObjectFactory<HttpMessageConverters> messageConverters;

    @Bean …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot feign openfeign

7
推荐指数
1
解决办法
2万
查看次数

spring data mongodb调用save两次导致重复键异常

我尝试使用 spring 数据 mongodb 存储库保存一个实体。我有一个级联保存的 EventListener。

问题是,我需要保存一个实体以获取其内部 id 并执行进一步的状态更改并在之后保存该实体。

 @Test
    void testUpdate() {
        FooDto fooDto = getResource("/json/foo.json", new TypeReference<FooDto>() {
        });
        Foo foo = fooMapper.fromDTO(fooDto);
        foo = fooService.save(foo);
        log.info("Saved foo: " + foo);
        foo.setState(FooState.Bar);
        foo = fooService.save(foo);
        log.info("Updated foo: " + foo);
    }
Run Code Online (Sandbox Code Playgroud)

我有一个关于 foo 子集合的索引。它不会更新子项,但会尝试将它们插入两次,从而导致 org.springframework.dao.DuplicateKeyException。

为什么它不保存而是尝试再次插入?

有关的:

Spring Data MongoRepository 保存导致重复键错误


编辑:版本:

mongodb 4、spring boot 2.3.3.RELEASE


编辑更多细节:

存储库:

public interface FooRepository extends MongoRepository<Foo, String> 
Run Code Online (Sandbox Code Playgroud)

实体:

@Document
public class Foo {

    @Id
    private String id;
    private FooState state;


    @DBRef …
Run Code Online (Sandbox Code Playgroud)

java spring mongodb spring-data-mongodb spring-boot

6
推荐指数
1
解决办法
1181
查看次数