gpt4 book ai didi

java - NoSuchBeanDefinitionException : No qualifying bean of type 'org.springframework.boot.web.reactive.error.ErrorAttributes' available:

转载 作者:行者123 更新时间:2023-12-02 02:43:30 26 4
gpt4 key购买 nike

我正在关注 https://www.baeldung.com/spring-webflux-errors在 Spring Webflux 项目中处理错误的教程。

package com.example.demo.exception;

import org.springframework.boot.autoconfigure.web.ResourceProperties;
import org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler;
import org.springframework.boot.web.reactive.error.ErrorAttributes;
import org.springframework.context.ApplicationContext;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.codec.ServerCodecConfigurer;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.server.*;
import reactor.core.publisher.Mono;

import java.util.Map;

@Component
@Order(-2)
public class ExceptionWebHandler extends AbstractErrorWebExceptionHandler {

public ExceptionWebHandler(ErrorAttributes errorAttributes,
ApplicationContext applicationContext,
ServerCodecConfigurer serverCodecConfigurer) {
super(errorAttributes, new ResourceProperties(), applicationContext);
super.setMessageWriters(serverCodecConfigurer.getWriters());
super.setMessageReaders(serverCodecConfigurer.getReaders());
}
@Override
protected RouterFunction<ServerResponse> getRoutingFunction(final ErrorAttributes errorAttributes) {
return RouterFunctions.route(RequestPredicates.all(), this::renderErrorResponse);
}

private Mono<ServerResponse> renderErrorResponse(ServerRequest serverRequest) {
Map<String,Object> errorAttributes = getErrorAttributes(serverRequest, false);
return ServerResponse.status(HttpStatus.INTERNAL_SERVER_ERROR)
.contentType(MediaType.APPLICATION_JSON)
.body(BodyInserters.fromObject(errorAttributes.get("message")));
}
}

运行项目时出现以下错误。

通过构造函数参数 0 表示的未满足的依赖关系;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用类型为“org.springframework.boot.web.reactive.error.ErrorAttributes”的合格 bean:预计至少有 1 个 bean 有资格作为 Autowiring 候选者。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

描述:

com.example.demo.exception.ExceptionWebHandler 中构造函数的参数 0 需要一个无法找到类型为“org.springframework.boot.web.reactive.error.ErrorAttributes”的 bean。

以下候选人被发现但无法注入(inject):- 未加载“ErrorWebFluxAutoConfiguration”中的 Bean 方法“errorAttributes”,因为它不是响应式 Web 应用程序

行动:

考虑重新访问上面的条目或在您的配置中定义类型为“org.springframework.boot.web.reactive.error.ErrorAttributes”的 bean。

我不确定应该 Autowiring 哪个对象。错误消息说它用于 ErrorAttributes,但我不知道如何。我尝试将 @Autowired 添加到构造函数中的参数并单独作为类的属性,但它没有帮助。

最佳答案

已找到以下候选对象但无法注入(inject):-“ErrorWebFluxAutoConfiguration”中的 Bean 方法“errorAttributes”未加载,因为不是响应式 Web 应用程序

可能是您的问题或至少是其中一个问题。

Spring 文档在 the last paragraph 中说明:

Adding both spring-boot-starter-web and spring-boot-starter-webflux modules in your application results in Spring Boot auto-configuring Spring MVC, not WebFlux. This behavior has been chosen because many Spring developers add spring-boot-starter-webflux to their Spring MVC application to use the reactive WebClient. You can still enforce your choice by setting the chosen application type to SpringApplication.setWebApplicationType(WebApplicationType.REACTIVE).

因此,在您的应用程序中的某个地方,您直接或通过其他依赖项传递地引入了 spring-web

这反过来会导致您的应用程序将自动配置为非 webflux 应用程序。

关于java - NoSuchBeanDefinitionException : No qualifying bean of type 'org.springframework.boot.web.reactive.error.ErrorAttributes' available:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63178617/

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