我创建了一个骆驼路由,其中包含以下异常处理:
onException(BadRequestException.class)
.handled(true)
.process(exchange -> {
System.out.println("Reached processor");
System.out.println(exchange.getIn().getBody(String.class));
})
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(HttpStatus.BAD_REQUEST));
我向http://localhost:8080/services/rest/endpoint?key=value
发出请求。
在一个bean中,有一些验证要求两个查询参数是必需的,分别为key
和keyTwo
。因为keyTwo
不存在,所以我抛出了一个BadRequestException
异常:
public void assertRequiredParametersPresentOnExchange() throws BadRequestException {
try {
requiredParameters.stream()
.forEach(p -> assertNotNull(p));
} catch (IllegalArgumentException e) {
throw new BadRequestException(e.getMessage());
}
}
当我执行这个URL时,我可以在上面的异常处理程序中看到
Reached processor
的输出,但是之后什么也没有发生。Postman等待回复约60秒,然后给我状态码23。我在这里缺少什么?MEP?在交换中设置某些属性?
msg.setFault(false)
设置为显式值,因为否则Camel或者Jetty会覆盖我定义的状态码并将其设置为500。不过我不确定你使用的是哪种服务器实现。 - Roman Vottner