0

用例

我有以下休息客户

@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=Testdescription不同于description=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. With 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));
4

0 回答 0