В настоящее время я работаю с сервером REST с Java, особенно с Джерси и Hibernate, для сохранения. У меня также есть база данных Postgresql.
Мне принадлежит таблица «Картинки» со следующей структурой:
- число: целое число (PK)
- регистрация: дата
- изображение: bytea
- MIME: VARCHAR
- owner_id: целое число (FK)
Мой класс Java:
public class Picture implements Serializable {
@JsonProperty("numero")
private Long numero;
@JsonProperty("register")
@JsonFormat(pattern = "dd.MM.yyyy")
private LocalDate register;
@JsonProperty("picture")
private byte[] picture;
@JsonProperty("mime")
private String mime;
@JsonIgnore
private Owner owner;
...
Моя картографическая форма:
<?xml version="1.0" encoding="UTF-8" ?>
<entity-mappings>
<package>ch.hearc.aspoba.model</package>
<entity class="Picture">
<table name="pictures"/>
<attributes>
<id name="numero">
<column name="numero"/>
<generated-value strategy="IDENTITY"/>
</id>
<basic name="register">
<column name="register" nullable="true"/>
</basic>
<basic name="mime">
<column name="mime" nullable="false"/>
</basic>
<many-to-one name="owner">
<join-column name="owner_id"/>
</many-to-one>
</attributes>
</entity>
</entity-mappings>
Мой класс персистенции:
public Set<Picture> getPictures(Long ownerId){
return inTransaction(() ->{
Owner owner = getEntityManager().find(Owner.class, ownerId);
List<Picture> pictures = owner.getPictures();
return new HashSet<>(pictures);
});
}
Для проверки я напрямую добавил изображение в свою базу данных, используя DataGrip (кнопка «Добавить файл»).
Затем я делаю выбор: select picture from pictures
Результат:
STUwNGU0NzBkMGExYTBhMDAwMDAwMGQ0OTQ4NDQ1MjAwMDAwMDA1MDAwMDAwMDUwODA2MDAwMDAwOGQ2ZjI2ZTUwMDAwMDAxYzQ5NDQ0MTU0MDhkNzYzZjhmZmZmM2ZjMzdmMDYyMDA1YzMyMDEyODRkMDMxZjE4MjU4Y2QwNDAwMGVmNTM1Y2JkMThlMGUxZjAwMDAwMDAwNDk0NTRlNDRhZTQyNjA4Mg==
Когда я делаю запрос с почтальоном, я получаю таблицу байтов, но она не такая, как у select.
KzU0NTU3NzRlNDc1NTMwNGU3YTQyNmI0ZDQ3NDU3ODU5NTQ0MjY4NGQ0NDQxNzc0ZDQ0NDE3NzRkNDc1MTMwNGY1NDUxMzQ0ZTQ0NTEzMTRkNmE0MTc3NGQ0NDQxNzc0ZDQ0NDEzMTRkNDQ0MTc3NGQ0NDQxNzc0ZDQ0NTU3NzRmNDQ0MTMyNGQ0NDQxNzc0ZDQ0NDE3NzRmNDc1MTMyNWE2YTQ5MzI1YTU0NTU3NzRkNDQ0MTc3NGQ0NDQxNzg1OTdhNTEzNTRlNDQ1MTMwNGQ1NDU1MzA0ZDQ0Njg2YjRlN2E1OTdhNWE2YTY4NmQ1YTZkNWE2ZDRkMzI1YTZhNGQ3YTY0NmQ0ZDQ0NTk3OTRkNDQ0MTMxNTk3YTRkNzk0ZDQ0NDU3OTRmNDQ1MjZiNGQ0NDRkNzg1YTZhNDUzNDRkNmE1NTM0NTkzMjUxNzc0ZTQ0NDE3NzRkNDc1NjZkNGU1NDRkMzE1OTMyNGE2YjRkNTQ2ODZjNGQ0NzU1Nzg1YTZhNDE3NzRkNDQ0MTc3NGQ0NDQxNzc0ZTQ0NmIzMDRlNTQ1MjZjNGU0NDUyNjg1YTU0NTE3OTRlNmE0MTM0NGQ2NzNkM2Q=
Более того, когда я проверяю свои результаты с помощью такой утилиты, как:
https://base64.guru/converter/decode/image. Они находятся в «text / plain» вместо «image / png».
У меня вопрос: как правильно управлять байтами, чтобы джерси отправлял мне полезный массив байтов?