用例
我有以下休息客户
@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
.
我尝试过的其他解决方案
- 使用
Form
而不是 POJO:没有数据发送到服务器
@POST
@Path("Invoice")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
CustomResponse requestForm(@QueryParam("instance") String instance, @BeanParam Form form);
- 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));