泽西岛客户发布表格数据

时间:2017-08-10 21:47:48

标签: java jax-rs jersey-2.0 jersey-client

我正在学习JAX-RS和Jersey。我试图将数据发布到URL但是我有一个我不知道要解决的问题:

Form formData = new Form();
formData.param("merchant_id", mPayment.getMerchantId());
formData.param("transaction_id", mPayment.getTransactionId());
formData.param("code", mPayment.getCode());
formData.param("amount", String.valueOf(mPayment.getAmount()));
formData.param("desc", mPayment.getDesc());
formData.param("phone", mPayment.getPhone());

Response response = target.path("process").request()
        .accept(MediaType.APPLICATION_JSON)
        .post(Entity.form(formData));

现在一切都很好,只是它只是一个字符串但是服务器期望字段数量的浮点数据类型但是当我尝试在没有String.valueOf()的情况下使用它时得到一个错误。如何添加不同数据类型的参数,以便发布?

1 个答案:

答案 0 :(得分:1)

您无法在对服务器的调用中维护类型信息。表单数据将使用application / x-www-form-urlencoded内容类型标题作为文本传输,这就是Form类接受String参数值的原因(类似于您只能以浏览器形式输入文本值的方式)。 / p>

所以你的代码应该足够了。在服务器端,您可以将参数声明为float,并使用javax.ws.rs.FormParam对其进行注释。如果Jersey运行时无法将参数强制转换为所需(浮点)类型,则返回400 BAD REQUEST。

简而言之:

  • 保持客户端代码不变。
  • 使用类似于:

    的服务器代码
    import javax.ws.rs.FormParam;
    import javax.ws.rs.POST;
    import javax.ws.rs.Path;
    import javax.ws.rs.core.Response;
    
    @Path("/service")
    public class myService {
    
        @POST
        public Response addOrder(
            @FormParam("merchant_id") String merchant_id,
            @FormParam("amount") float amount
            // more parameters 
            ) {
    
            return Response.ok().build();
        }
    }