Camel REST路由在异常时未返回状态码。

4

我创建了一个骆驼路由,其中包含以下异常处理:

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中,有一些验证要求两个查询参数是必需的,分别为keykeyTwo。因为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?在交换中设置某些属性?

2
我通常在自己的bean中处理HTTP错误响应,该bean由异常处理程序调用,在那里我将msg.setFault(false)设置为显式值,因为否则Camel或者Jetty会覆盖我定义的状态码并将其设置为500。不过我不确定你使用的是哪种服务器实现。 - Roman Vottner
谢谢,我在更改状态码时考虑了这个。处理器主要放置在那里以跟踪问题发生的位置。现在已经处理并格式化为通用的JSON错误体,类似于您提供的链接! - jokarl
1个回答

6

看起来你正在获取枚举的序号,它是23。你可以尝试替换该枚举。

org.apache.http.HttpStatus.SC_BAD_REQUEST 

替代

org.springframework.http.HttpStatus.BAD_REQUEST

并查看是否有任何区别。


1
假设您在示例中使用了org.springframework.http.HttpStatus.BAD_REQUEST。 - Aku Nour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接