2016-05-14 8 views
0

Ich lerne, wie man REST APIs schreibt! Wie kann ich Formularwerte in einer Textdatei mit Ruheaufrufen speichern?Speichern von Formulardaten in Datei mit Rest?

index.html

<form action="rest/product/adddata" method="post"> 
    Enter Id:<input type="text" name="id"/><br/><br/> 
    Enter Name:<input type="text" name="name"/><br/><br/> 
    Enter Price:<input type="text" name="price"/><br/><br/> 
    <input type="submit" value="Add Product"/> 
</form> 

service.java

@Path("/product") 
public class ProductService{ 
    @POST 
    @Path("/adddata") 
    public Response addUser( 
     @FormParam("id") int id, 
     @FormParam("name") String name, 
     @FormParam("price") float price) { 

     return Response.status(200) 
      .entity(" Product added successfuly!<br> Id: "+id+"<br> Name: " + name+"<br> Price: "+price) 
      .build(); 
    } 
} 

I-Wert von id, name und price in eine Datei hinzufügen möchten. Wo muss ich die Funktion zum Hinzufügen von Daten in die Datei schreiben?

+0

Sie sollten in die 'addUser()' Methode in die Datei schreiben. Sie könnten den Code direkt dort hinzufügen oder Sie können eine Hilfsmethode aufrufen, die das schwere Heben durchführt. –

Antwort

0

Schreibcode in

public Response addUser( 
     @FormParam("id") int id, 
     @FormParam("name") String name, 
     @FormParam("price") float price) { 
     saveFile(id,name,price); 

     return Response.status(200) 
      .entity(" Product added successfuly!<br> Id: "+id+"<br> Name: " + name+"<br> Price: "+price) 
      .build(); 
    } 

Code schreiben in savefile in

Datei speichern
0

Der beste Ansatz, dies zu tun wird eine andere Klasse zu erstellen, die und aus Dateien lesen schreiben können. Und injizieren Sie diese Klasse in diesen Rest-Endpunkt.

Da der direkte Code in Ruhe Endpunkt Klasse soll Anforderung zu verarbeiten, nicht Dateien zu schreiben

class FormSynchronizer { 
    public static final File FORM_BASE = new File(...); // The location of directory which will contain all these files 

    public void storeFile(Map map, String fileName){ 
     File toStoreFile = new File(FORM_BASE, fileName); 
     /* Write code to store file */ 
    } 
} 

Injizieren Sie diese Klasse in Ihrem Rest Endpunkt Klasse

public class ProductService{ 

    @Inject FormSynchronizer formSynchronizer; 

    @POST 
    @Path("/adddata") 
    public Response addUser( 
     @FormParam("id") int id, 
     @FormParam("name") String name, 
     @FormParam("price") float price) { 

     Map<String, Object> data = new HashMap<>(); 
     data.put("id", id); 
     /* put all data you want to store in this map */ 
     formSynchronizer.storeForm(data, "FORM_" + new Date().getTime()); // I used current time prefixed with 'FORM_' string as file name 

     return Response.status(200) 
      .entity(" Product added successfuly!<br> Id: "+id+"<br> Name: " + name+"<br> Price: "+price) 
      .build(); 
    } 
}  

Verwenden jackson Karte konvertieren Objekt in JSON-Datei und umgekehrt.
map to/from json file

+0

Das sieht gut aus, aber ich habe bereits eine Datei auf dem Server. Ich möchte nur Daten hinzufügen. Und die Daten, die ich speichern möchte, ist kein Schlüsselwertpaar, sondern nur der Wert. wie 1, somename, 123 –

+0

Ich habe dir nur gezeigt, wie Sie das tun können. Sie können in der 'storeFile'-Methode beliebig nach Belieben verfahren und diese nach Belieben ändern. Der Punkt ist, dass Sie eine andere Klasse erstellen und Code schreiben sollten, um Ihre Daten zu speichern oder anzufügen. Eigentlich hätte ich dir geraten, Daten in der XML-Datei zu speichern. Welches ist die gebräuchlichste Art Daten zu speichern? – afzalex