我使用springboot camel-validator-starter
来验证传入请求的查询参数。库抛出PredicateValidationException
,状态码为500。我想处理这个异常的方式是它抛出一个适当的自定义异常。根据camel validate document,我可以创建一个PredicateExceptionFactory
bean来处理异常。然而,如何创建这个bean还不清楚,也没有这样的例子。如果有人能帮我的话我会非常感激的。
下面是代码:
rest("/").description(description)
.id(routeId)
.get(endpoint)
.produces(APPLICATION_JSON)
.consumes(APPLICATION_JSON)
.bindingMode(RestBindingMode.auto)
.type(responseClazz)
.enableCORS(true)
.route()
.onException(CustomValidationFailed.class)
.handled(true)
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(HttpStatus.SC_BAD_REQUEST))
.setBody(constant("offerId should be provided"))
.end()
.validate(header("offerId").isNotNull())
.end()
.endRest()
.to(routeTechnicalId);
字符串
下面是抛出的异常:
org.apache.camel.support.processor.PredicateValidationException: Validation failed for Predicate[header(offerId) is not null]. Exchange[]
at org.apache.camel.support.processor.PredicateValidatingProcessor.process(PredicateValidatingProcessor.java:70)
at org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:66)
at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:812)
at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:720)
at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:187)
at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:64)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:184)
at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:399)
at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83)
at org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:41)
at org.apache.camel.http.common.CamelServlet.doExecute(CamelServlet.java:319)
at org.apache.camel.http.common.CamelServlet.doService(CamelServlet.java:214)
at org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:130)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)
型
1条答案
按热度按时间1cklez4t1#
你在一个类中实现这个接口,然后根据你使用的运行时(spring Boot ,quarkus或其他东西),这个bean示例可以由这些运行时自动创建。如果没有,您需要手动将bean示例注册到ApacheCamel。