2017-08-10 34 views
1

我正在学习JAX-RS和泽西岛。我想发布数据到一个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

不要担心它的服务器的责任,如果需要浇铸成漂浮。您可以简单地将所有内容转换为字符串并发送因此,你的代码是正确的。 –

+1

仅供参考 - “param”仅接受字符串参数 - https://github.com/jax-rs/api/blob/master/jaxrs-api/src/main/java/javax/ws/rs/core/Form。 Java如预期。 –

回答

1

您无法维护通过服务器调用的类型信息。表单数据将作为文本与application/x-www-form-urlencoded内容类型头一起传输,这就是Form类接受String参数值的原因(类似于只能在浏览器窗体中输入文本值的方式)。

所以你的代码应该足够了。在服务器端,您可以将参数声明为float并使用javax.ws.rs.FormParam对其进行注释。如果Jersey运行时无法将参数转换为所需的(float)类型,则它将返回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(); 
        } 
    } 
    
+0

所以你说这是不可能的,也没有解决办法,我唯一的解决方案是将它转换为服务器上的浮点数? – user3718908

+0

是的,但您不需要自己进行转换,您可以将使用FormParam注释的参数声明为float。看到这个代码示例采用int形式参数: http://www.mkyong.com/webservices/jax-rs/jax-rs-formparam-example/ –

+0

但值不会来自窗体。 – user3718908