반응형
사용자 지정 ErrorWebExceptionHandler 생성 실패
나는 나만의 것을 만들려고 노력하고 있습니다.ErrorWebExceptionHandler
Spring Boot 2(Spring Boot 2)에서 기본 프로그램을 확장했지만 응용 프로그램이 시작되지 않고 다음 메시지가 표시됩니다.
Caused by: java.lang.IllegalArgumentException: Property 'messageWriters' is required
at org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler.afterPropertiesSet(AbstractErrorWebExceptionHandler.java:214) ~[spring-boot-autoconfigure-2.0.4.RELEASE.jar:2.0.4.RELEASE]
내 처리기(Kotlin 코드):
@Component
@Order(-2)
class SampleErrorWebExceptionHandler(
errorAttributes: ErrorAttributes?,
resourceProperties: ResourceProperties?,
errorProperties: ErrorProperties?,
applicationContext: ApplicationContext?
) : DefaultErrorWebExceptionHandler(errorAttributes, resourceProperties, errorProperties, applicationContext) {
override fun logError(request: ServerRequest, errorStatus: HttpStatus) {
// do something
}
}
무엇이 원인이 될 수 있습니까?
생성자에 ServerCodecConfigurer의 종속성을 추가해 보십시오.
GlobalErrorWebExceptionHandler(
ErrorAttributes errorAttributes,
ResourceProperties resourceProperties,
ApplicationContext applicationContext,
ServerCodecConfigurer configurer
) {
super(errorAttributes, resourceProperties, applicationContext);
this.setMessageWriters(configurer.getWriters());
}
설정해야 합니다.messageWriters
여기에 필요하기 때문에 그 예를 들어.당신은 아마 그것을 다음과 같이 만들어야 할 것입니다.@Bean
Spring Boot이 전용 자동 구성에서 수행하는 것과 같습니다.
저는 이것도 그냥 했고, 스프링 구현을 보고 나서 시공자에 구성 요소를 추가했습니다.
@Component
@Order(-2)
class GlobalErrorWebExceptionHandler(
errorAttributes: ErrorAttributes,
resourceProperties: ResourceProperties,
applicationContext: ApplicationContext,
viewResolvers: ObjectProvider<ViewResolver>,
serverCodecConfigurer: ServerCodecConfigurer
) : AbstractErrorWebExceptionHandler(
errorAttributes,
resourceProperties,
applicationContext
) {
private val logger = LogFactory.getLog(GlobalErrorWebExceptionHandler::class.java)!!
init {
setViewResolvers(viewResolvers.orderedStream().collect(Collectors.toList()))
setMessageWriters(serverCodecConfigurer.writers)
setMessageReaders(serverCodecConfigurer.readers)
}
override fun getRoutingFunction(errorAttributes: ErrorAttributes) = RouterFunctions.route(RequestPredicates.all(), HandlerFunction { request ->
val ex = getError(request)
logger.error(ex.message)
ServerResponse.ok().build()
})
}
위 솔루션이 명확하지 않은 경우 아래를 참조하십시오.
@Component
@Order(-2)
public class GlobalErrorWebExceptionHandler extends AbstractErrorWebExceptionHandler {
private final ObjectProvider<ViewResolver> viewResolvers;
private final ServerCodecConfigurer serverCodecConfigurer;
public GlobalErrorWebExceptionHandler(ObjectProvider<ViewResolver> viewResolvers, ServerCodecConfigurer serverCodecConfigurer,
ErrorAttributes errorAttributes, WebProperties.Resources resources, ApplicationContext applicationContext) {
super(errorAttributes, resources, applicationContext);
this.viewResolvers = viewResolvers;
this.serverCodecConfigurer = serverCodecConfigurer;
super.setMessageWriters(serverCodecConfigurer.getWriters());
super.setMessageReaders(serverCodecConfigurer.getReaders());
super.setViewResolvers(viewResolvers.orderedStream().collect(Collectors.toList()));
}
@Override
protected RouterFunction<ServerResponse> getRoutingFunction(ErrorAttributes errorAttributes) {
return RouterFunctions.route(RequestPredicates.all(), this::renderErrorResponse);
}
private Mono<ServerResponse> renderErrorResponse(ServerRequest serverRequest) {
Map<String, Object> errorPropertiesMap = getErrorAttributes(serverRequest,
ErrorAttributeOptions.defaults());
return ServerResponse.status(HttpStatus.BAD_REQUEST)
.contentType(MediaType.APPLICATION_JSON)
.body(BodyInserters.fromValue(errorPropertiesMap));
}
}
언급URL : https://stackoverflow.com/questions/52497901/creating-custom-errorwebexceptionhandler-fails
반응형
'programing' 카테고리의 다른 글
Electron을 사용할 때 Angular 2의 기본 href를 어떻게 구성해야 합니까? (0) | 2023.07.02 |
---|---|
TypeScript에서 입력된 개체 리터럴을 지정하려면 어떻게 해야 합니까? (0) | 2023.07.02 |
쉼표로 구분된 항목을 새 행으로 분할 (0) | 2023.07.02 |
ggplot2의 중심 그림 제목 (0) | 2023.07.02 |
VB에서 String ENUM을 정의합니다.그물 (0) | 2023.07.02 |