2016-09-23 6 views
1

JavaEE 7からのJSON処理を調査中ですが、以下に説明する質問があります。JavaEE 7からのJSON処理を使用したビジネスオブジェクトの作成

(尋ねる前に、私は情報の下に読んで、まだ疑問を持っている)

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)私は、応答を返すREST Webサービスを持っていますJSON形式:

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

2)に対応するJPAエンティティは、私は、このWebサービスを呼び出すジャージークライアントAPIとJava EE JSONの処理に基づいてクライアントを持っている)

@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ユーザー

と呼ばれるがあります。

Mavenの依存関係:

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

クライアントコード:

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

そして最後の質問:

iはUser = new User();のようにユーザーを作成し、手動ですべてのプロパティを設定しているか、より便利に存在するべきですユーザーを作成する方法は?

+0

外部IDを...答えを –

答えて

0

現時点では単純なマッピングで直接マッピングすることはできませんjavax.json-api Jersey Client APIを使用している場合は、Jackson mapperを使用する方がよいでしょう。

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

あなたはこのような単純な構造を使用することができるだろう:誤解と思われる "ローカル" ID(主キー)対

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

答えをありがとう!最後に私はJackson2の実現を使用しました 'ObjectMapper mapper = new ObjectMapper(); ユーザーのユーザー= mapper.readValue(response.readEntity(InputStream.class)、User.class); ' –

0

あなたが探しているのはコンストラクタメソッドだと思います。ユーザーの場合、3つの別々のフィールドがあり、Userオブジェクトをインスタンス化するとすぐに入力できます。これはあなたのUserクラスにこのメソッド(コンストラクタ)を追加行うために

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

あなたはもちろんの変数のために私のハードな値を代入し、次の行を使用するクラスのインスタンスを作成:

User user = new User(1141, "[email protected]", "Y"); 

POJOに直接またはJSONからJSON解析を行う場合は、Google GsonやJackson2などのライブラリの使用を検討してください。

私はこれがあなたの質問に答えることを願っています!

+0

ありがとう!コンストラクタを追加するのは問題ではありません。しかし、このアイデアは、「JavaEE 7でPOJOに直接構文解析することは可能ですか?手動で新しいPOJOを作成しないでください)私はGoogle GsonまたはJackson2について知っていますが、JavaEE 7のJSON処理では面白いです。 –

関連する問題