You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring/Kotlin中枚举列表作为路径变量的RestAssured测试问题咨询

解决方案

1. 先修正Spring控制器配置

首先要确保控制器路径包含正确的路径变量占位符,且Spring支持逗号分隔字符串转枚举列表:

@GetMapping(path = ["/engine/workday/{days}"], produces = ["application/json;charset=UTF-8"])
@ApiOperation("Process by days of week")
fun processByDaysOfWeek(@PathVariable days: List<DayOfWeek>): Any {
    // 业务逻辑实现
}

enum class DayOfWeek {
  MONDAY, WEDNESDAY, THURSDAY, FRIDAY;
}

Spring MVC 默认内置了字符串到集合的转换器,可自动将逗号分隔的路径变量转为对应枚举列表,无需额外配置。如果出现转换失败的情况,可以手动注册自定义转换器:

import org.springframework.core.convert.converter.Converter
import org.springframework.stereotype.Component

@Component
class StringToDayOfWeekListConverter : Converter<String, List<DayOfWeek>> {
    override fun convert(source: String): List<DayOfWeek> {
        return source.split(",").map { DayOfWeek.valueOf(it.trim()) }
    }
}

2. 修改RestAssured测试传参逻辑

直接传入List对象时,RestAssured会默认调用List的toString方法生成[MONDAY, THURSDAY]格式的字符串,URL编码后就会出现你遇到的异常路径。只需要提前将枚举列表拼接为逗号分隔的纯字符串再传入即可:

val days = listOf(DayOfWeek.MONDAY, DayOfWeek.THURSDAY)
// 拼接为逗号分隔的字符串
val pathParamValue = days.joinToString(separator = ",")

RestAssured
  .given()
  .spec(spec)
  .pathParam("days", pathParamValue)
  .get("/engine/workday/{days}")
  .then()
  .statusCode(200)
  .extract().`as`(JsonNode::class.java)

修改后生成的请求路径就会是你预期的http://localhost:xx/engine/workday/MONDAY,THURSDAY格式。

内容的提问来源于stack exchange,提问作者BusyBee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:24:05