Как использовать postgresql bytea с джерси и гибернацией? - PullRequest
0 голосов
/ 01 июня 2019

В настоящее время я работаю с сервером 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».

У меня вопрос: как правильно управлять байтами, чтобы джерси отправлял мне полезный массив байтов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...