如何确定 Microprofile RestClient 中 x-www-form-urlencoded 的参数顺序?

问题描述

用例

我有以下休息客户端

@RegisterRestClient(configKey = "service")
public interface Service {

  @POST
  @Path("Invoice")
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
  Response request(@QueryParam("instance") String instance,@BeanParam Input input);

}

Input一个类,它是一个 POJO,包括

这样的属性
public class Input {

  @FormParam("title")
  public String title;

  @FormParam("description")
  public String description;

问题

对 API 的请求工作正常,但是在我的情况下,属性的顺序确实很重要(这背后的原因是什么,我目前无法回答,抱歉)。 >

因此发送 title=Test&description=Testdescriptiondescription=Testdescription&title=Test 不同。

我尝试过的其他解决方

  1. 使用 Form 代替 POJO:没有数据发送到服务器
  @POST
  @Path("Invoice")
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
  Customresponse requestForm(@QueryParam("instance") String instance,@BeanParam Form form);
  1. 使用 Entit<Form>:没有数据发送到服务器
  @POST
  @Path("Invoice")
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
  Customresponse requestForm(@QueryParam("instance") String instance,@BeanParam Entity<Form> form);

假设

我发现 org.jboss.resteasy.client.jaxrs.internal.proxy.processors.FormProcessor 在内部使用了 HashMap。我认为这正是问题所在,因为没有保证的顺序。我的假设正确吗?

问题

我该如何解决这个问题,并始终使用 Microprofile Rest Client 为 API 提供相同的顺序。

解决方法

它与 org.jboss.resteasy.client.jaxrs.ResteasyClient 调用类似

 Response response = target
            .request(MediaType.APPLICATION_JSON)
            .accept(MediaType.APPLICATION_FORM_URLENCODED)
            .post(Entity.form(form));

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)