原创

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 服务中弥补它吗?

正文到此结束
热门推荐
本文目录