powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / FormData в объект DTO Spring mvc
7 сообщений из 7, страница 1 из 1
FormData в объект DTO Spring mvc
    #39689835
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такое DTO:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class OwnerProfileUpdateDTO {

    private String firstName;

    private String lastName;

    private String phone;

    private String company;

    private long countryId;
    private long regionId;
    private long townId;

    private MultipartFile avatar;

    public OwnerProfileUpdateDTO() {}

    // getters and setters

}



Есть REST контроллер:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
@RestController
@Secured("OWNER")
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/api/v1/owner",produces = MediaType.APPLICATION_JSON_VALUE)
public class ApiOwnerController {

    @Autowired
    private OwnerService ownerService;

    private static final Logger LOGGER = LogManager.getLogger(ApiOwnerController.class);

    @PostMapping(value = "/profile/update", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public Response fillUpdate(Response response, OwnerProfileUpdateDTO ownerProfileUpdateDTO) {
        LOGGER.info(ownerProfileUpdateDTO);
        response.setSuccess("OK");
        return response;
    }

}



Отправляю данные на сервер в формате FormData при помощи AJAX :

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
$.ajax({
       url: 'update',
       data: new FormData($('form')[0]),
       type: 'POST',
       dataType: 'json',
       processData: false,
       contentType: false,
       enctype: 'multipart/form-data'
})



Мне нужно передать файл и дополнительные данные, поэтому использую FormData
Но в ownerProfileUpdateDTO все поля все null . почему так? не могу понять.

Пробовал к OwnerProfileUpdateDTO ownerProfileUpdateDTO добавлять аннотацию @RequestBody , но при запросе выдает ошибку:

Код: java
1.
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundary0iIfmbRKA2DP0lnF;charset=UTF-8' not supported



что не так? как правильно сделать?
...
Рейтинг: 0 / 0
FormData в объект DTO Spring mvc
    #39689926
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Серьезно нет идей?
...
Рейтинг: 0 / 0
FormData в объект DTO Spring mvc
    #39689930
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopЕсть такое DTO:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class OwnerProfileUpdateDTO {

    private String firstName;

    private String lastName;

    private String phone;

    private String company;

    private long countryId;
    private long regionId;
    private long townId;

    private MultipartFile avatar;

    public OwnerProfileUpdateDTO() {}

    // getters and setters

}



Есть REST контроллер:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
@RestController
@Secured("OWNER")
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/api/v1/owner",produces = MediaType.APPLICATION_JSON_VALUE)
public class ApiOwnerController {

    @Autowired
    private OwnerService ownerService;

    private static final Logger LOGGER = LogManager.getLogger(ApiOwnerController.class);

    @PostMapping(value = "/profile/update", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public Response fillUpdate(Response response, OwnerProfileUpdateDTO ownerProfileUpdateDTO) {
        LOGGER.info(ownerProfileUpdateDTO);
        response.setSuccess("OK");
        return response;
    }

}



Отправляю данные на сервер в формате FormData при помощи AJAX :

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
$.ajax({
       url: 'update',
       data: new FormData($('form')[0]),
       type: 'POST',
       dataType: 'json',
       processData: false,
       contentType: false,
       enctype: 'multipart/form-data'
})



Мне нужно передать файл и дополнительные данные, поэтому использую FormData
Но в ownerProfileUpdateDTO все поля все null . почему так? не могу понять.

Пробовал к OwnerProfileUpdateDTO ownerProfileUpdateDTO добавлять аннотацию @RequestBody , но при запросе выдает ошибку:

Код: java
1.
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundary0iIfmbRKA2DP0lnF;charset=UTF-8' not supported



что не так? как правильно сделать?

Нужен обычный post, а файл завернуть в строку base64.

Я так до 100мб файлы пересылал на сервер.

С уважением, Валентин
...
Рейтинг: 0 / 0
FormData в объект DTO Spring mvc
    #39689934
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin KolesnikovЯ так до 100мб файлы пересылал на сервер.это +33% к размеру файла
...
Рейтинг: 0 / 0
FormData в объект DTO Spring mvc
    #39689938
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все оказалось намного проще.

В моем случае оказалось все так:

Добавил:

Код: xml
1.
2.
3.
4.
5.
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>



и это:

Код: java
1.
2.
3.
4.
5.
6.
@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(100000);
    return multipartResolver;
}



ну и в самом контроллере добавил @ModelAttribute :

Код: java
1.
2.
3.
4.
5.
6.
7.
@PostMapping(value = "/profile/update", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public Response fillUpdate(Response response, @ModelAttribute 
 OwnerProfileUpdateDTO ownerProfileUpdateDTO) {
        LOGGER.info(ownerProfileUpdateDTO);
        response.setSuccess("OK");
        return response;
    }
...
Рейтинг: 0 / 0
FormData в объект DTO Spring mvc
    #39689993
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,
Магия спринг). Молодец!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
FormData в объект DTO Spring mvc
    #39942401
HalapsikoN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tsyklop,
ДАЙ ТЕБЕ БОГ ЗДОРОВЬЕЧКА, ЩЧАСТЯ И УСЕГОУСЕГО <3<3<3<3<3<3<3<3
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / FormData в объект DTO Spring mvc
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]