当我尝试使用服务器上的 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状态代码,一切都会正常工作。
有人知道如何用柑橘解决这个问题吗?
不幸的是,我很久之后才看到这个问题。我希望它对某人有用。
一般来说,
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
}
}