PUT-Methode (RESTful) funktioniert nicht als eine Möglichkeit zur Aktualisierung von Ressourcen

Laut diesem Artikel(http://restcookbook.com/HTTP%20Methods/put-vs-post/), SETZEN funktionieren soll als Methode zum aktualisieren von Ressourcen.

Jedoch üben Erholsam mit JAX_RS 2.0 und 2.0 Jersey, ich glaube nicht, dass es updates einer bestimmten Ressource.
(I. e. Ich studiere Erholsam mit JAX_RS 2.0 und 2.0 Jersey)

Hier ist eine Ressource wie diese.

<customer>
    <name>Before</name>
    <postcode>111</postcode>
</customer>

Was ich versuche zu tun, ist zu aktualisieren (vielleicht sollte ich sagen, "ersetzen") diese Ressource.

    ClientConfig config = new ClientConfig();
    Client client = ClientBuilder.newClient(config);
    WebTarget target =  client.target("http://xxx/yyy/zzz/end.cust");

    Customer cust = new Customer();
    cust.setName("After");
    cust.setPostcode(222);

    target.path("Before").request().put(Entity.xml(cust));

@Id-annotation auf "Name" in der "Customer" - Klasse, sodass der Pfad "Vor" funktionieren soll, wie die ID und die erste Ressource (mit der Bezeichnung "Vorher") sollten ersetzt werden mit der zweiten Ressource (mit der Bezeichnung "Nach").

Jedoch nach der Codierung oben ausgeführt, der "Vor" - Ressource, die noch bleibt, und es ist eine neue "Danach" resrouce.
Es scheint, dass die PUT-Methode gearbeitet, um eine neue Ressource erstellen, anstatt die Aktualisierung etwas.
(d.h. Es sind sowohl "Vor" und "Nach" Ressourcen, und nichts aktualisiert wurde)

Getestet habe ich eine POST-Methode, um eine neue Ressource erstellen, und es entstand eine neue Ressource, als ich erwartet hatte.

Wenn Sie sehen, was ich falsch mache oder was getan werden muss, könnten Sie bitte ein paar Ratschläge geben?

Bearbeiten

Werde ich hinzufügen, die server-Seite code. Die Methode annotiert mit @LEGEN Sie ist wie diese.

 @PUT
 @Path("{id}")
 @Consumes({"application/xml", "application/json"})
 public void edit(@PathParam("id") String id, Customer entity) {
     super.edit(entity);
 }

Dies ist innerhalb einer Klasse aufgerufen CustomerFacadeREST.java automatisch erstellt, nachdem ich erstellte eine "Rest-Dienst aus der Datenbank".

Laut NetBeans' document, super.edit () - Methode ist ursprünglich wie diese.

 public void edit(T entity) {
 getEntityManager().merge(entity);
 }

In der "Customer" - Klasse, @Id wird festgelegt, um die "name" - Wert in dieser Weise.

 public class Customer implements Serializable {
     private static final long serialVersionUID = 1L;
     @Id
     @Basic(optional = false)
     @NotNull
     @Size(min = 1, max = 80)
     @Column(name = "Name")
     private String name;
     //Other fields, such as Postcode...

     public Customer() {
     }

     //Other constructors and methods...
     }
  • Wo ist Ihre Anfrage Verarbeitung-code?
  • Fügen Sie Ihrem server-side code. Es scheint, dass es nicht zulässt, Sie ändern die <name/> tag.
  • >Smutje, ich fürchte, ich bin nicht sicher, was Sie genau damit gemeint ist, request-Verarbeitung code. Hat es etwas zu tun mit request()?
  • >carlspring, ich habe einige Teile der server-Seite code. Ich hoffe, dass Sie hilfreich sein wird.
InformationsquelleAutor Hiroki | 2014-12-05
Schreibe einen Kommentar