Анализ данных JSON с помощью GSON в модель с сохранением JPAJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Анализ данных JSON с помощью GSON в модель с сохранением JPA

Сообщение Anonymous »

Мне нужно проанализировать данные JSON, полученные от внешнего API, и сохранить их с помощью аннотаций JPA. В качестве парсера я использовал GSON вместе с TypeAdapter, поскольку модель имеет следующую упрощенную структуру:
test.json:

Код: Выделить всё

{
"workID": 12355,
"contributors":
[
{
"fullName": "UNKNOWN 1",
"workContributorID": 1100933315,
"workID": 12355
},
{
"fullName": "UNKNOWN 2",
"workContributorID": 1100933314,
"workID": 12355
}
]
}
Contributor.java:

Код: Выделить всё

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
@Table(name = "contributor")
public class Contributor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long workContributorID;

private String fullName;

@ManyToOne
@JoinColumn(name = "work_id", referencedColumnName = "id")
private WorkSP workID;
}
WorkSP.java:

Код: Выделить всё

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;

@Getter
@Setter
@Entity
@Table(name = "work_sp")
public class WorkSP {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long workID;
private ArrayList contributors;

public WorkSP(long asLong) {
this.workID = asLong;
}
}
Тестовый класс:

Код: Выделить всё

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializer;
import com.google.gson.stream.JsonReader;

import java.io.FileNotFoundException;
import java.io.FileReader;

public class App
{
public static void main( String[] args ) throws FileNotFoundException {
JsonReader readerTest = new JsonReader(new FileReader("test.json"));
Gson gSonInstance = new GsonBuilder().
registerTypeAdapter(WorkSP.class, (JsonDeserializer) (json, type, jsonDeserializationContext) -> {
return new WorkSP(json.getAsJsonObject().getAsLong());
}).
create();
WorkSP work = gSonInstance.fromJson(readerTest, WorkSP.class);

}
}
получится следующий результат:

Код: Выделить всё

Exception in thread "main" java.lang.UnsupportedOperationException: JsonObject
at com.google.gson.JsonElement.getAsLong(JsonElement.java:294)
at org.example.App.lambda$main$0(App.java:21)
at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:95)
at com.google.gson.Gson.fromJson(Gson.java:1361)
at com.google.gson.Gson.fromJson(Gson.java:1306)
at org.example.App.main(App.java:24)
Я полагаю, что jsonDeserializationContext из JsonDeserializer может анализировать объекты WorkSP в зависимости от того, принадлежат ли они Contributor.class или WorkSP.class, но я не знаю, как это сделать.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ersistence
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»