Citrus 框架“[520] 没有匹配常量”- 自定义 HTTP 状态代码

问题描述 投票:0回答:1

当我尝试使用服务器上的 API 运行 Citrus v.2.7.5 测试时遇到问题,该服务器向我的 citrus 客户端响应自定义的 HTTP 状态代码。我的测试抛出 IllegalArgument 异常,因为服务器使用 520 Http-Status-Code 响应消息。

我认为问题是由于 Citrus 使用的 spring-web v.4.3.14 框架造成的。 spring-web 包含一个 HttpStatus 类,其中包含有效状态代码的枚举。当您尝试创建不是“有效”的自定义状态代码的 valueOf() 时,它将抛出错误:

/**
 * Return the enum constant of this type with the specified numeric value.
 * @param statusCode the numeric value of the enum to be returned
 * @return the enum constant with the specified numeric value
 * @throws IllegalArgumentException if this enum has no constant for the specified numeric value
 */
public static HttpStatus valueOf(int statusCode) {
    HttpStatus status = resolve(statusCode);
    if (status == null) {
        throw new IllegalArgumentException("No matching constant for [" + statusCode + "]");
    }
    return status;

}

在 spring-web 的较新版本(5.x)中,此错误已修复,您可以使用自定义 http-status-codes,但 citrus 适用于这个旧版本...... 也许我错了,异常被抛出到其他地方,但这与自定义http状态代码有关,因为如果我们得到200 HTTP状态代码,一切都会正常工作。

有人知道如何用柑橘解决这个问题吗?

java http-status-codes citrus-framework spring-framework-beans
1个回答
0
投票

不幸的是,我很久之后才看到这个问题。我希望它对某人有用。

一般来说,

org.springframework.http
包支持从500到511的服务器端代码。 如果您看到 Spring 项目的代码,您可以在
HttpStatus
枚举中找到它。

就我而言,我的解决方案是编写一个验证请求代码的函数:

private boolean isValidHttpStatus(int statusCode) {
        try {
            HttpStatus.valueOf(statusCode);
            return true;
        } catch (IllegalArgumentException e) {
            return false; // Not a valid HttpStatus
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.