Есть ли способ преобразовать байтовый массив в String в modelAttribute? - PullRequest
0 голосов
/ 30 мая 2020
• 1000 . Причина, по которой я использую массив байтов, заключается в том, что я использую Ckeditor для получения содержимого WYSIWYG. Столбец postContent имеет тип Blob. Однако, когда я возвращаю содержимое для редактирования, я получаю массив байтов, а не String. В контроллере я получаю и отправляю данные на JSP, как показано ниже:
....
Post post = postService.findByPostId(postId);
        if (post != null) {
            mv.addObject("title", "Edit Post");
            mv.addObject("post", post);
 ...

Итак, когда я использую JSTL в JSP, он печатает postContect как массив. Я мог бы получить много ссылок, где преобразовываю String в байтовый массив и наоборот, но здесь, поскольку я использую форму spring и modelAttribute, я не уверен, где мне редактировать. Как я могу вернуть строку между ними?

Спасибо.

1 Ответ

0 голосов
/ 30 мая 2020

Я нашел ответ, и он работает для меня. Я добавляю здесь комментарий, потому что кто-то, у кого есть подобная проблема, получит представление.

  1. Я создал преобразователь Spring для массива строк в байты

    @ Component publi c класс StringBase64ToByteArray реализует Converter {

    @Override
    public byte[] convert(String source) {
        byte[] byteSource = null;
        System.out.println("StringBase64ToByteArray is called");
        try {
            byteSource = Base64.getEncoder().encode(source.getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return byteSource;
    }
    

    }

  2. Затем я создал другой преобразователь из байтового массива в строку

    @ Component publi c класс ByteArrayToStringBase64 реализует Converter {

    @Override
    public String convert(byte[] source) {
        byte[] decodedString = Base64.getDecoder().decode(source);
        return new String(decodedString);
    }
    

    }

  3. Я зарегистрировал оба преобразователя для конфигурации весенней загрузки. @Configuration publi c класс WebMvcConfig реализует WebMvcConfigurer {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringBase64ToByteArray());
        registry.addConverter(new ByteArrayToStringBase64());
    }   
    

    }

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