JAX-RS 服务、Axios 客户端和多值 POST 参数?
温馨提示:
本文最后更新于 2024年04月12日,已超过 37 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
我有一个 JAX-RS 服务,POST
其操作需要一个Set<String>
该参数@FormParam
在服务定义中注释为。我已经使用 OpenApi 记录了该服务,并通过 Axios 生成了 Typescript 客户端来使用它openapi-generator
。我发现客户端API但是签名与服务端API的匹配类似。,在使用客户端运行测试时,我看到了意外的行为。
我执行POST
使用2个String
作为交付的价值Array
(根据生成的客户端)。然而,在服务器端,我看到该值作为单身的 String
这是用分隔符的。它没有被 JAX-RS 分割并按Set<String>
预期处理。它仍然是一个Set<String>
,但其中只有一个值。
Set
如果我的值是Java值,我也看到类似的行为Enum
。在这种情况下,Set
完全零它。enum
根本不解析和转换值。
我丢失了什么吗?我是否应该以不同的方式处理可能具有多个值的 HTML 表单参数?
编辑:为了收集更多测试数据,我创建了一个简单的 JAX-RSClient
并调用相同的端点,并ContainerRequestFilter
在服务上添加了,以便我可以看到主体中传递的内容。当与我的客户进行通话时,我清楚地看到主体中的参数如下所示:
[arrayParam=String1&arrayParam=String2&arrayParam=String3]
使用这种格式,我的服务能够Set<String>
然而,当我使用 Axios 客户端调用时,我看到了主要中的参数如下所示:
[arrayParam=String1%2CString2%2CString3]
因此,很明显,Axios 客户端","
在字符串值之间放置了一个,而不仅仅是将它们串联为单独的参数值。我的问题是,我可以在 Axios 客户端中以某种方式覆盖此行为吗?除此之外,是否有一个干净的方法可以在我的 JAX-RS 服务中弥补它吗?
正文到此结束
- 本文标签: 家庭宠物
- 本文链接: https://www.coder6.net/article/2150
- 版权声明: 本文由蚂蚁原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权