我有一个OpenApi规范:
paths:
/lessons:
get:
tags:
- lesson
operationId: getLessons
parameters:
- in: query
name: daysOfWeek
schema:
type: array
items:
$ref: '#/components/schemas/DaysOfWeekEnum'使用swagger codegen可以生成一个端点,如下所示:
@ApiOperation(value = "Get a collection lessons", nickname = "getLessons", notes = "", response = LessonDto.class, responseContainer = "List", tags={ "lesson", })
@ApiResponses(value = {
@ApiResponse(code = 200, message = "List of Lessons", response = LessonDto.class, responseContainer = "List") })
@RequestMapping(value = "/lessons",
produces = { "application/json" },
method = RequestMethod.GET)
default ResponseEntity<List<LessonDto>> _getLessons(@ApiParam(removed for brevity) @Valid @RequestParam(value = "daysOfWeek", required = false, defaultValue="new ArrayList<>()") List<DaysOfWeekEnum> daysOfWeek) {
return getLessons(daysOfWeek);
}我在这样的测试中使用TestRestTemplate:
ResponseEntity<List<LessonDto>> lessonDtos =
testRestTemplate.exchange("/lessons", HttpMethod.GET, null,
new ParameterizedTypeReference<List<LessonDto>>() {
});这个网址的作用是:
/lessons?daysOfWeek=THURSDAY这些urls没有:
/lessons
/lessons?daysOfWeek=SOME_INVALID_VALUE...and我得到以下错误:
嵌套异常是com.fasterxml.jackson.databind.exc.MismatchedInputException:不能从START_OBJECT令牌反序列化
java.util.ArrayList实例
任何帮助都很感激。
发布于 2019-08-24 21:21:41
因此,这个问题与openapi生成器错误有关。摘要如下:
当将类型数组的参数添加到操作中时,生成的Spring代码在Spring参数注释中包含无效的defaultValue
修复方法是升级到更高版本的openapi-generator - 4.0.0给我带来了好处。
顺便提一下,错误消息:
异常是com.fasterxml.jackson.databind.exc.MismatchedInputException:不能将java.util.ArrayList实例反序列化出START_OBJECT令牌
..was有点红鲱鱼,它实际上是TestRestTemplate相关的,即ParameterizedTypeReference部分。将此更改为String.class确定了错误的真实性质。
发布于 2019-08-23 16:57:41
为了给您提供一个empty list,需要将默认值设置为空字符串:
@RequestParam(value = "daysOfWeek",
required = false,
defaultValue = "") List<DaysOfWeekEnum> daysOfWeek) https://stackoverflow.com/questions/57630310
复制相似问题