首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可选查询字符串enum参数- openapi,springboot

可选查询字符串enum参数- openapi,springboot
EN

Stack Overflow用户
提问于 2019-08-23 16:50:52
回答 2查看 1.8K关注 0票数 1

我有一个OpenApi规范:

代码语言:javascript
复制
paths:
  /lessons:
    get:
      tags:
        - lesson
      operationId: getLessons
      parameters:
        - in: query
          name: daysOfWeek
          schema:
            type: array
            items:
              $ref: '#/components/schemas/DaysOfWeekEnum'

使用swagger codegen可以生成一个端点,如下所示:

代码语言:javascript
复制
 @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

代码语言:javascript
复制
ResponseEntity<List<LessonDto>> lessonDtos =
        testRestTemplate.exchange("/lessons", HttpMethod.GET, null,
            new ParameterizedTypeReference<List<LessonDto>>() {
            });

这个网址的作用是:

代码语言:javascript
复制
/lessons?daysOfWeek=THURSDAY

这些urls没有:

代码语言:javascript
复制
/lessons
/lessons?daysOfWeek=SOME_INVALID_VALUE

...and我得到以下错误:

嵌套异常是com.fasterxml.jackson.databind.exc.MismatchedInputException:不能从START_OBJECT令牌反序列化java.util.ArrayList实例

任何帮助都很感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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确定了错误的真实性质。

票数 0
EN

Stack Overflow用户

发布于 2019-08-23 16:57:41

为了给您提供一个empty list,需要将默认值设置为空字符串:

代码语言:javascript
复制
@RequestParam(value = "daysOfWeek", 
              required = false, 
              defaultValue = "") List<DaysOfWeekEnum> daysOfWeek) 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57630310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档