Vertx Swagger Codegen解析date-time参数报JsonParseException错误求助
问题根因
报错本质是
Json.mapper.readValue的错误使用:该方法要求入参是合法的JSON格式字符串,你传入的纯日期文本2021-06-06T10:50:00Z没有包裹JSON要求的双引号,不属于合法JSON字符串,所以Jackson解析时会把第一个-当成非法字符抛出异常;传入0时因为数字本身是合法JSON值,所以可以被正常解析为时间戳对应的OffsetDateTime。
解决方案
方案1:修改swagger vertx codegen的类型转换模板(永久生效,推荐)
swagger vertx codegen生成的参数转换逻辑默认使用了通用JSON反序列化逻辑,对date-time类型的query参数适配错误,你可以自定义代码生成模板,将date-time类型query参数的转换逻辑从:
Json.mapper.readValue(paramStr, OffsetDateTime.class)
替换为JDK自带的时间解析方法:
// 标准ISO 8601格式可直接解析 OffsetDateTime.parse(paramStr)
如果有自定义格式需求,可额外声明DateTimeFormatter指定格式规则即可。
方案2:直接修改生成的接口代码
如果不想调整代码生成模板,可以直接修改生成好的verticle接口文件里对应参数的转换逻辑,替换为上述直接解析的代码即可生效。
方案3:调用侧兼容(不推荐)
如果暂时无法修改服务端代码,可以让调用侧传参时给日期字符串包裹双引号,比如传入"2021-06-06T10:50:00Z"(注意需要做URL编码,双引号编码为%22),但这种方式不符合OpenAPI规范对query参数的定义,不建议长期使用。
内容的提问来源于stack exchange,提问作者BigBug
相关产品推荐
相关产品推荐

