2017-08-10 4 views
1

Ich lerne über JAX-RS und Jersey. Ich versuche, Daten an eine URL zu schreiben aber ich habe ein Problem, ich weiß nicht, zu beheben:Jersey Client Buchungsformular Daten

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)); 

Jetzt ist alles gut funktioniert, wenn es nur eine Zeichenfolge jedoch der Server einen float-Datentyp für das Feld erwartet Betrag aber wenn ich versuche, es ohne String.valueOf() zu verwenden, erhalte ich einen Fehler. Wie füge ich Parameter mit unterschiedlichen Datentypen hinzu, damit ich posten kann?

+1

Keine Sorge, es in der Verantwortung des Servers ist in float zu werfen, falls erforderlich. Sie können einfach alles in String umwandeln und senden. Daher ist Ihr Code korrekt. –

+1

FYI - das 'param' nimmt nur String-Parameter - https://github.com/jax-rs/api/blob/master/jaxrs-api/src/main/java/javax/ws/rs/core/Form. Java wie erwartet. –

Antwort

1

Sie können die Typinformationen über den Anruf zum Server nicht verwalten. Die Formulardaten werden als Text mit dem Header des Headers application/x-www-form-urlencoded übertragen. Daher akzeptiert die Form-Klasse String-Parameterwerte (ähnlich wie Sie nur Textwerte in einem Browserformular eingeben konnten).

Ihr Code sollte also ausreichen. Auf der Serverseite können Sie den Parameter als Float deklarieren und mit javax.ws.rs.FormParam kommentieren. Wenn der Parameter nicht mit der Jersey-Laufzeit in den gewünschten (Gleitkomma-) Typ umgewandelt werden kann, wird eine 400 BAD REQUEST zurückgegeben.

Auf den Punkt gebracht:

  • halten Client-Code, wie es ist.
  • Verwenden Server Code ähnlich:

    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

Sie sagen also, dass es nicht möglich ist und es keine Arbeit gibt und dass die einzige Lösung für mich darin besteht, sie auf einen Float auf dem Server zu übertragen? – user3718908

+0

Ja, aber Sie müssen die Besetzung nicht selbst durchführen. Sie können den mit FormParam annotierten Parameter als Float deklarieren. Sehen Sie sich dieses Codebeispiel an, das einen int-Formularparameter verwendet: http://www.mkyong.com/webservices/jax-rs/jax-rs-formparam-example/ –

+0

Der Wert wird jedoch nicht von einem Formular kommen. – user3718908

Verwandte Themen