2016-05-24 7 views
0

Gibt es eine Möglichkeit, Json-Payload zu Model Bean zuordnen. Wenn möglich, bitte geben Sie mir ein Beispiel.Wie JSON-Payload modellieren Bean in Struts2

Im Folgenden sind die Klassen, die ich verwende.

package com.sample; 

import java.io.Serializable; 

public class Employee implements Serializable{ 
    private String firstName; 
    private String lastName; 
    private int id; 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    @Override 
    public String toString() { 
     StringBuilder builder = new StringBuilder(); 
     builder.append("Employee [firstName=").append(firstName) 
       .append(", lastName=").append(lastName).append(", id=") 
       .append(id).append("]"); 
     return builder.toString(); 
    } 

} 

Folgendes ist meine Aktionsklasse.

package com.sample.controller; 

    import com.opensymphony.xwork2.ModelDriven; 
    import com.sample.Employee; 

    public class EmployeeController implements ModelDriven<Employee> { 
     private String name = "Hari krishna"; 
     Employee emp = new Employee(); 

     public String addEmployee() { 
      System.out.println(emp); 
      return "success"; 
     } 

     @Override 
     public Employee getModel() { 
      return emp; 
     } 
    } 

Es folgt mein struts.xml

<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
    <package name="default" extends="json-default"> 

     <interceptors> 
      <interceptor-stack name="jsonStack"> 
       <interceptor-ref name="json"> 
        <param name="enableSMD">true</param> 
       </interceptor-ref> 
      </interceptor-stack> 
     </interceptors> 

     <action name="addEmployee" class = "com.sample.controller.EmployeeController" method = "addEmployee"> 
      <interceptor-ref name="jsonStack"></interceptor-ref> 
      <result type="json" /> 
     </action> 
    </package> 
</struts> 

Als ich die Aktion "addEmployee", mit JSON-Daten "{" vorName nennen ":" Hari " "id": 123," nachName ":" assds "}" Ich bekomme folgende Antwort. Ich setze den Inhaltstyp auf text/json.

{ 
"model": { 
"firstName": null 
"id": 0 
"lastName": null 
}- 
} 

Ich poste Daten mit Advanced Rest Client.

+0

Ich habe versucht, Jersey zu integrieren, aber hat nicht funktioniert. Ich habe nicht viele Beispiele gefunden, die sich auf struts2-json plugin beziehen, die mit der Post-Anfrage in Verbindung stehen. –

+0

Ich folgte der Antwort in "http://stackoverflow.com/questions/19824833/how-to-post-an-array-of-object-in-json-to-struts2-action" –

+0

Model Klasse Mitarbeiter initialisiert mit Nullwerte wie "Employee [firstName = null, lastName = null, id = 0]". aber ich gebe json {"firstName": "Hari", "id": 123, "lastName": "assds"} an meine Aktions-URL weiter. –

Antwort

-1

Wenn Sie die JSON-Daten vom Client zum Server senden, senden Sie sie als Zeichenfolge und in Aktionsklasse erstellen Sie eine normale String-Variable zum Empfangen und Halten der Json-Zeichenfolge.

Dann können Sie manuell Ihre Bean aus String mit dem JSON-Parser auffüllen oder eine Lib wie google gson verwenden, die zu diesem Zweck über eingebaute Funktionen verfügt.

Google Gson ist eine Java-Serialisierungs-/Deserialisierungsbibliothek, die Java-Objekte in JSON und zurück konvertieren kann.

Sie können Ihren eigenen Struts Interceptor erstellen, um diesen Prozess zu umbrechen oder ihn direkt in Ihrer Aktionsklasse zu implementieren.

+0

Nicht nützlich. Dafür gibt es ein s2-json plugin. –

+0

Es war mir sehr nützlich, also teilte ich meine Meinung. UND wenn es ein s2-json plugin gibt, bedeutet das nicht, dass du deine EIGENE SIMPLE-passende Lösung nicht erstellen kannst. –