Как сопоставить составной файл с DTO с помощью Spring Boot для входящего запроса

#java #spring #spring-boot #http #upload

#java #spring #пружинный ботинок #http #загрузка

Вопрос:

У меня есть этот класс запроса DTO

 Public Class MyRequestDTO(){

private String name;

private MultipartFile docPic;

}
 

я хочу получить в контроллере

 
@PostMapping("/test")
public String test(@RequestBody MyRequestDTO dto){

system.out.print(dto.getdocPic.getOriginalFileName());

return "success;
}
 

но всегда получаю javaNullexception, когда я пытаюсь отобразить этот вновь запрошенный файл, правильно ли сопоставлять многокомпонентный файл внутри DTO?

Ответ №1:

С последней версией spring boot у нас есть работающий пример без аннотации @RequestBody, так что попробуйте это:

 @PostMapping("/test")
public String test(MyRequestDTO dto){
 

Если это не сработает, следующее место, которое вы должны перепроверить, — это ваш запрос. В частности , тот Content-type . Приведенная выше подпись работает для нас с запросом, который имеет тип содержимого: multipart/form-data

Комментарии:

1. Кроме того, я думаю, вы хотели скрыть свой фактический код и написали здесь аналогичную версию, но было бы здорово, если бы это была действительная JAVA, иначе мне было неудобно читать 🙂 … Пример: Public Class MyRequestDTO() , return "success;

Ответ №2:

Вы получаете javaNullexception, потому что вы получаете MyRequestDTO dto как null или какое-либо свойство объекта dto указывает на null.

Поэтому, пожалуйста, убедитесь, прежде чем вызывать метод getter для нулевого объекта.

Во-первых, убедитесь, что dto.getdocPic не указывает на null.

 
@PostMapping("/test")
public String test(@RequestBody MyRequestDTO dto){

    if(dto.getdocPic() != null){
        
         system.out.print(dto.getdocPic().getOriginalFileName());
    }

    return "success;

}