Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622

Spring MVC Как вытащить из модели атрибут поменять его формат и вставить обратно

17.08.2018, 10:20. Показов 3953. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется модель которая формируется из данных базы
Java
1
2
3
4
5
   @RequestMapping(value = "/", method = RequestMethod.GET)
    public String listStudents(Model model)
    {
        List<Student> students = studentDAO.getAllStudents();
        model.addAttribute("students", students);
В модели имеется такой атрибут как student.img в виде byte[]
Можно-ли вытащить его из модели поменять его формат на base64 и засунуть обратно?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.08.2018, 10:20
Ответы с готовыми решениями:

MultipartFile Spring MVC, как сохранить файл и вытащить назад на View
День добрый. У меня есть метод в сервисе, которые сохраняет файл(картинку) в базу и локально на ПК. Как вытящаить назад картинку из базы, я...

Spring MVC атрибуты модели
Добрый день! Работаю со Spring MVC, допустим есть два метода в классе контроллера: @RequestMapping(value = &quot;/&quot;,...

Выбрать из первой таблицы атрибут записи, удовлетворяющей некому условию, и вставить его во вторую
Помогите пожалуйста...Есть две таблицы, к примеру одна заполнена а вторая пуста. Необходимо выбрать из 1 таблицы атрибут...

32
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
18.08.2018, 16:06  [ТС]
Студворк — интернет-сервис помощи студентам
Спасибо. Компилируется.
Да. Хотя логичней из Сервиса отдавать DTO. Конечно если слой сервисов есть.
Что такое слой сервисов?
В проекте имеются Entity, DAO, DAOImplement и Controller.
Я так понимаю что я смогу в контроллере из StudentDto создать модельку в которой будет дополнительное поле
Java
1
private String imgBase64;
, в отличии от Student, где такого поля нет?
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
18.08.2018, 16:13
Цитата Сообщение от VlGuvin Посмотреть сообщение
Что такое слой сервисов?
Слой, в котором содержится бизнес логика и из которого вызываются методы Репозитория (DAO). Для этого используется аннотация @Service. Подробнее тут или в документации.
Цитата Сообщение от VlGuvin Посмотреть сообщение
будет дополнительное поле
Да. Или что-то исключить.
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
18.08.2018, 17:01  [ТС]
Сделал так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@RequestMapping(value = "/", method = RequestMethod.GET)
    public String listStudents(Model model)
    {
        List<Student> students = studentDAO.getAllStudents();
 
        for (Student student : students) {
            StudentDto studentDto = new StudentDto();
            Long id = student.getId();
            studentDto.setId(id);
            String firstName = student.getFirstName();
            studentDto.setFirstName(firstName);
            String lastName = student.getLastName();
            studentDto.setLastName(lastName);
            Date dateOfBirth = student.getDateOfBirth();
            studentDto.setDateOfBirth(dateOfBirth);
            String gender = student.getGender();
            studentDto.setGender(gender);
            Address address = student.getAddress();
            studentDto.setAddress(address);
            byte[] img = student.getImg();
            studentDto.setImg(img);
        }
 
        List<StudentDto> studentDtos = new ArrayList<>();
     .....
Теперь нужно заполнить список studentDtos ( из которого затем будет создана моделька), объектами studentDto.
Не врубаюсь как это сделать
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
18.08.2018, 17:05
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        List<Student> students = studentDAO.getAllStudents();
        List<StudentDto> studentDtos = new ArrayList<>();  //объявить перед циклом
 
        for (Student student : students) {
            StudentDto studentDto = new StudentDto();
 
            Long id = student.getId();
            studentDto.setId(id);
            String firstName = student.getFirstName();
            studentDto.setFirstName(firstName);
            String lastName = student.getLastName();
            studentDto.setLastName(lastName);
            Date dateOfBirth = student.getDateOfBirth();
            studentDto.setDateOfBirth(dateOfBirth);
            String gender = student.getGender();
            studentDto.setGender(gender);
            Address address = student.getAddress();
            studentDto.setAddress(address);
            byte[] img = student.getImg();
            studentDto.setImg(img);
 
            studentDtos.add(studentDto);      //добавить в коллекцию
        }

Не по теме:

Ранова-то Вы за Спринг взялись.

1
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.08.2018, 17:19
VlGuvin, может хеллоу вород для начала осилить? Зачем классу дто поле byte[] img?
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
18.08.2018, 18:15  [ТС]
VlGuvin, может хеллоу вород для начала осилить? Зачем классу дто поле byte[] img?
хеллоу вород уже да.
byte[] img на всякий пожарный случай...

Добавлено через 5 минут
Java
1
Ранова-то Вы за Спринг взялись.
Это точно. Нет смысла пояснять почему, но так получилось, что не я а он за меня взялся...

Добавлено через 5 минут
Спасибо. Моделька получилась.
Java
1
model.addAttribute("students", studentDtos);
Для проверки в studentDtos просто повторил старый students
Неплохой DTO механизм...

Добавлено через 12 минут
A А вот с преобразованием не выходит
Сделал так
Java
1
2
3
4
5
6
          ........
           byte[] img = student.getImg();
            studentDto.setImgBase64(new String (Base64.getEncoder().encode(img)));
 
            studentDtos.add(studentDto);
        }
При запуске сервер выдает
Java
1
2
3
4
Message Request processing failed; nested exception is java.lang.NullPointerException
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
Ничего плохого не сделал. Взял img из students преобразовал в Base64 и запихнул в studentDto
Java
1
studentDto.setImgBase64(new String (Base64.getEncoder().encode(img)));
Почему Spring ругается?
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
18.08.2018, 18:27
VlGuvin, NullPointerException ни о чем не говорит?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.08.2018, 18:28
VlGuvin, вангую что виноват твой "пожарный случай".
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
18.08.2018, 18:38  [ТС]
Произвольная строка типа
Java
1
2
3
4
5
....
byte[] img = student.getImg();
            String imageBase64Str = "blblblblblblblb";
            studentDto.setImgBase64(imageBase64Str);
.....
работает

Добавлено через 2 минуты
вангую что виноват твой "пожарный случай".
В чем виноват? В любом случае
Java
1
byte[] img = student.getImg();
нужно иметь
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.08.2018, 19:19
VlGuvin, дебаг тебе в помощь.
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
18.08.2018, 19:46  [ТС]
Ну да. Догадываюсь, но нужно проверить.
Похоже прежде чем далать преобразование каждого последующего img его нужно проверять на пустоту.
Если в нем ничего нет то и возникнет исключение.

Добавлено через 1 минуту
дебаг тебе в помощь.
Да. Idea в этом плане рулит. Так и есть - исключение на пустой img.

Добавлено через 14 минут
За DTO еще раз спасибо. Хороший механизм.
С картинками пока так и не врубаюсь. Что записывается в базу этим Javascript?.. Вся картинка или ссылка где она находится на сервере.
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
....
 <form:form method="POST"  action="${pageContext.request.contextPath}/addStudent" commandName="student">
....
 
<input id="img" name="img"  type="file"  class="form-Control" onchange="readURL(this);" />
 <script type="text/javascript">
            function readURL(input) {
                if (input.files && input.files[0]) {
                    var reader = new FileReader();
 
                    reader.onload = function (e) {
                        $('#blah')
                            .attr('src', e.target.result)
                            .width(200)
                            .height(178);
                    };
 
                    reader.readAsDataURL(input.files[0]);
                }
            }
...
Если в базу пишется весь бинарный код картинки то тогда достаточно его из базы считать в переменную, преобразовать в строку Base64 и она должна отобразиться на jsp Но у меня в базе в поле img после работы вышеприведенного скрипта примерно 10...15 байт информации. Что это не понятно. Разве картинка может иметь длину 15 байт? Даже самая маленькая картинка занимает до 1000 байт.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
18.08.2018, 19:58
Этим джава скриптом в базу ничего не записывается.

Добавлено через 1 минуту
И вообще ты код пишешь или мы, нахрена ты тут спрашиваешь, что делает код, который ты написал?
0
-13 / 6 / 6
Регистрация: 04.08.2015
Сообщений: 622
18.08.2018, 20:29  [ТС]
Понял. Тогда Ой.
Если не сложно поясните пожалуйста как из формы послать в базу картинку
В контроллере POST устроен так
Java
1
2
3
4
5
6
7
....
@RequestMapping(value = "/addStudent", method = RequestMethod.POST)
    public String addStudent(@ModelAttribute("student") Student student) {
        studentDAO.addStudent(student);
        return "redirect:/";
    }
....
В .jsp примерно так
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
...
<form:form method="POST"  action="${pageContext.request.contextPath}/addStudent" commandName="student">
...
 <form:input path="firstName" class="form-Control"/>
...
<input id="blah" name="img"  type="file"  class="form-Control" onchange="readURL(this);" />
...
 </form:form>
...
<script type="text/javascript">
            function readURL(input) {
                if (input.files && input.files[0]) {
                    var reader = new FileReader();
 
                    reader.onload = function (e) {
                        $('#blah')
                            .attr('src', e.target.result)
                            .width(200)
                            .height(178);
                    };
 
                    reader.readAsDataURL(input.files[0]);
                }
            }
        </script>
Добавлено через 6 минут
И вообще ты код пишешь или мы, нахрена ты тут спрашиваешь, что делает код, который ты написал?
Прошу прощения если напрягаю. Код не совсем я...

Добавлено через 16 минут
Как я понимаю это должно быть так.
1. Сохранить файл картинки в папку для картинок.
2. Считать сохраненный файл в строку.
3. Добавить строку в нужное поле коллекции из которой будет сформирована модель
4. Передать в базу модель
Верно-ли я представляю операцию по размещеню картинки в базе в Spring?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.08.2018, 20:29

Spring MVC. 404 ошибка при включении Spring Data JPA в проект
Добрый день. Есть простой шаблонный проект с использованием Spring MVC и Maven. С зависимостями Spring MVC проект собирается нормально и...

Перевод проекта из Spring Maven в обычный Spring MVC
Здравствуйте. Подскажите, реально ли взять готовый проект, например -...

задания по spring core и spring mvc для новичков
Какие задания можно предложить новичкам для выполнения после знакомства их с spring core и mvc ?

Jetty embedded + Spring MVC + Spring Security
Добрый день. По роду работы приходилось писать на JavaSE, в том числе и сложные клиент/серверные программы. Использовал Netty, Apache...

Как добавить атрибут к XML элементу в модели?
Есть такая модель: public class RootObject { public const string Namespace = &quot;http://schemas.xmlsoap.org/soap/envelope/&quot;;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru