2016-09-23 5 views
1

Я изучаю обработку JSON из JavaEE 7, и у меня есть вопрос, описанный ниже.Создание бизнес-объекта с использованием обработки JSON из JavaEE 7

(прежде чем спрашивать я прочитал ниже информацию, но до сих пор вопрос)

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, который возвращает ответ в JSON:

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

2) Существует соответствующая JPA Entity называется User

@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) У меня есть клиент на основе Джерси Client API и Java EE JSON обработки, которые называют этот веб-сервис.

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

И, наконец, вопрос:

Должен ли я иметь создать пользователя как User = new User(); и задать все свойства вручную или существует более удобный способ создания пользователя?

+0

Внешняя Id против "местного" Id (первичный ключ), кажется заблуждением ... –

ответ

0

На данный момент нет возможности сделать прямое сопоставление с использованием простых javax.json-api Если вы используете API-интерфейс Jersey Client, лучше использовать картографию Jackson.

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

Вы могли бы использовать такую ​​простую конструкцию:

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

Спасибо за ответ! Наконец, я использовал реализацию Jackson2 'ObjectMapper mapper = new ObjectMapper(); Пользователь user = mapper.readValue (response.readEntity (InputStream.class), User.class); ' –

0

Я думаю, что вы ищете метод конструктора. В вашем случае для пользователя у вас есть три отдельных поля, которые можно заполнить, как только вы создадите экземпляр объекта 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"); 

Для разбора JSON непосредственно в POJO или из него вы можете взглянуть на библиотеку, такую ​​как Google Gson или Jackson2.

Я надеюсь, что это ответит на ваш вопрос!

+0

Спасибо за ответ! Не стоит добавлять конструктор. Но идея «возможно ли в обработке JavaEE 7 синтаксический анализ непосредственно POJO» (т.не создавать новые POJO вручную) Я знаю о Google Gson или Jackson2, но я интересен в обработке JavaEE 7 JSON. –