Jsonb.fromJson не десериализует набор, созданный из строки JSON, созданной Jsonb.toJson(objectWithSet).JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Jsonb.fromJson не десериализует набор, созданный из строки JSON, созданной Jsonb.toJson(objectWithSet).

Сообщение Anonymous »

У меня есть образец объекта (приведен ниже), который предназначен для использования с JAXB, JSON-B и JPA. Я написал несколько модульных тестов для проверки вывода, но JSON-B меня немного смущает. Когда я десериализую только что сериализованный объект, продукты не совпадают. А именно, набор не десериализуется, хотя он был сериализован нормально.
Я начал с JAXB и смог заставить его работать должным образом.
Мне пришлось создать каталог. класс, чтобы заставить Set правильно обрабатывать, а затем создал XmlJavaTypeAdapter для обработки Path.
Поскольку кажется, что все идет только в одном направлении, я попытался просто создать JsonbDeserializer, но использование нового JsonbConfig().withDeserializers(new DirectorySetDeserializer()), похоже, не сработало. На самом деле он вообще не использовал этот класс.
Идея состоит в том, чтобы иметь возможность использовать один объект для JAXB, JSON и JPA поверх REST, что оказывается намного сложнее. чем я мог себе представить.
Я добавил модульные тесты, чтобы придать мне больше уверенности в том, что
@POST
@Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public Response persistReview(Review review) {
...
}

должно было работать так, как ожидалось. (Конечно, нет)
Maven POM:

jakarta.json.bind
jakarta.json.bind-api
3.0.1


org.eclipse
yasson
3.0.2


Класс каталога (содержится в наборе):
@XmlAccessorType(XmlAccessType.FIELD)
public class Directory {
@XmlElement
@XmlJavaTypeAdapter(ArtifactDirectoryTranslator.class)
private Path path;

public Directory() {}

public Directory(Path path) {
this.path = path;
}

public Path getPath() {
return path;
}

public void setPath(Path path) {
this.path = path;
}
}

Класс JAXB/JSONB/Entity:
@XmlRootElement(name = "review")
@XmlAccessorType(XmlAccessType.FIELD)
public class Review {
@XmlElementWrapper(name = "artifact-directories")
private final Set directories = new HashSet();

public Review addDirectory(Path dirPath) {
directories.add(new Directory(dirPath));
return this;
}

public Set getDirectories() {
return directories;
}

public void setDirectories(Set directories) {
// done this way for JPA/Hibernate
this.directories.clear();
this.directories.addAll(directories);
}
}

Модульный тест:
@Test
public void testJsonb() {
Review uut_review = new Review();
uut_review.addDirectory(Path.of("/some/path/1"));
uut_review.addDirectory(Path.of("/some/path/2"));

JsonbConfig config = new JsonbConfig().withFormatting(true);
Jsonb jsonb = JsonbBuilder.newBuilder().withConfig(config).build();

// totally fine: {"directories":[{"path": "/some/path/1"}, {"path": "/some/path/2"}]}
String jsonResult = jsonb.toJson(uut_review);
System.out.println(jsonResult);

// not so good: {"directories":[]}
Review actualReivew = jsonb.fromJson(jsonResult, Review.class);
String jsonResult2 = jsonb.toJson(actualDataReivew);
System.out.println(jsonResult2);
}

Выходные данные модульного теста:
{
"directories": [
{
"path": "/some/path/1"
},
{
"path": "/some/path/2"
}
]
}
{
"directories": [
]
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... ing-genera
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Jsonb.fromJson не десериализует набор, созданный из строки JSON, созданной Jsonb.toJson(objectWithSet).
    Anonymous » » в форуме JAVA
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Кроссплатформенная поддержка toJson и fromJson
    Anonymous » » в форуме Android
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Кроссплатформенная поддержка toJson и fromJson
    Anonymous » » в форуме Android
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • ASP.NET Core десериализует JSON в производные классы
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Django DRF не десериализует json
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous

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