2016-09-23 3 views
1

Ich untersuche JSON-Verarbeitung von JavaEE 7, und ich habe eine unten beschriebene Frage.Erstellen eines Geschäftsobjekts mithilfe der JSON-Verarbeitung von JavaEE 7

(bevor ich unter info habe zu fragen, aber immer noch eine Frage)

http://docs.oracle.com/javaee/7/tutorial/jsonp004.htm

How can I cast a JSONObject to a custom Java class?

How do I convert a JSONObject to class object?

1) Ich habe einen Web-Service-REST, die Antwort in einem zurück JSON-Format:

{"id":1141,"email":"[email protected]","enabled":"Y"} 

2) Es gibt eine entsprechende JPA Entity Benutzer namens

@Table(name = "USER") 
@Entity 
public class User { 

@Id 
@Column(name = "USER_ID") 
private Long id; 

@Column(name = "EMAIL") 
private String email; 

@Column(name = "ENABLED") 
private String enabled; 

3) Ich habe einen Klienten basierend auf Jersey-Client-API und Java EE JSON Verarbeitung, die diesen Web-Service aufrufen.

Maven Abhängigkeiten:

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet-core</artifactId> 
    <version>2.22.1</version> 
    <scope>provided</scope> 
</dependency> 

<dependency> 
    <groupId>org.glassfish</groupId> 
    <artifactId>javax.json</artifactId> 
    <version>1.0.4</version> 
</dependency> 

Code Auftraggeber:

Client client = ClientBuilder.newClient(); 
WebTarget target = client.target("http://localhost:7001/projectname/rest"); 
WebTarget resourceWebTarget = target.path("users").queryParam("email", "[email protected]"); 
Invocation.Builder invocationBuilder = resourceWebTarget.request(MediaType.APPLICATION_JSON); 
Response response = invocationBuilder.get(); 

JsonReader reader = Json.createReader(response.readEntity(InputStream.class));   
JsonObject jObject = reader.readObject(); 

User user = new User(); 
user.setId(jObject.getJsonNumber("id").longValue()); 
user.setEmail(jObject.getString("email")); 
user.setEnabled(jObject.getString("enabled")); 

Und schließlich die Frage:

Sollte ich habe Benutzer wie User = new User(); erstellen und alle Eigenschaften manuell oder existiert bequemer Möglichkeit, Benutzer zu erstellen?

+0

Externe Id versus "local" Id (Primärschlüssel) scheint Missverständnis ... –

Antwort

0

Im Moment gibt es keine Möglichkeit, direkte Zuordnung mit einfachen javax.json-api Wenn Sie Jersey Client API verwenden, ist es besser, Jackson Mapper zu verwenden.

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>2.23.2</version> 
    <scope>provided</scope> 
</dependency> 

Sie wäre in der Lage solch einfache Konstruktion zu verwenden:

String jsonString = "{'id':1141,'email':'[email protected]','enabled':'Y'}"; 
User user = mapper.readValue(jsonString, User.class); 
+0

Danke für die Antwort! Schließlich habe ich Jackson2 Realisierung verwendet 'ObjectMapper Mapper = new ObjectMapper(); Benutzer user = mapper.readValue (response.readEntity (InputStream.class), User.class); ' –

0

Ich denke, was Sie suchen, ist eine Konstruktor-Methode. In Ihrem Fall für den Benutzer haben Sie drei separate Felder, die ausgefüllt werden können, sobald Sie Ihr Benutzerobjekt instanziieren.

Um dieses Verfahren dieses Add zu tun (Konstruktor), um Ihre Benutzerklasse:

public User(Long id, String email, String enabled){ 
    this.id = id; 
    this.email = email; 
    this.enabled = enabled; 
} 

Wenn eine Instanz der Klasse sind Sie in die folgende Zeile ersetzt meine harten Werte für Variablen natürlich verwenden:

Für JSON-Parsing direkt in oder aus POJOs möchten Sie vielleicht einen Blick in eine Bibliothek wie Google Gson oder Jackson2 werfen.

Ich hoffe, dies beantwortet Ihre Frage!

+0

Danke für die Antwort! Es ist kein Problem, einen Konstruktor hinzuzufügen. Aber die Idee "ist es in der JavaEE 7-Verarbeitung möglich, direkt zum POJO zu parsen" (d. H.nicht manuell POJO erstellen) Ich weiß über Google Gson oder Jackson2, aber ich bin interessant in JavaEE 7 JSON Verarbeitung. –

Verwandte Themen