如何确定Microprofile RestClient中编码的x-www-form-urle的参数顺序



用例

我有以下休息客户端

@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. 使用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客户端为API提供相同的订单。

变通办法

它与类似的org.jboss.resteasy.client.jaxrs.ResteasyClient调用一起工作

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

它对我有效,请参阅:

@POST
@Path(value = "/auth/realms/{realm}")
@Consumes(APPLICATION_FORM_URLENCODED_VALUE)
AuthenticateResponse authenticate(@PathParam("realm") String realm, MultivaluedMap<String,?> params);

尝试使用MultivaluedMap

相关内容

  • 没有找到相关文章

最新更新