Конструктор по умолчанию не найден; [com.sun.jersey.core.header.FormDataContentDisposition] [дублировать]

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

17
задан Rob McFeely 6 September 2014 в 12:24
поделиться

6 ответов

@RequestBody MultipartFile[] submissions

должно быть

@RequestParam("file") MultipartFile[] submissions

Файлы не являются телом запроса, они являются его частью и нет встроенного HttpMessageConverter, который может преобразовать запрос в массив MultiPartFile.

Вы также можете заменить HttpServletRequest на MultipartHttpServletRequest, что дает вам доступ к заголовкам отдельных частей.

14
ответ дан a better oliver 19 August 2018 в 07:27
поделиться
  • 1
    Это сработало. Все попытки моего клиента теперь работают против этого исправления на стороне сервера. Оказывается, мне не нужны элементы MultipartConfigElement и MultipartResolver. Возможно, загрузка создает для меня. – Rob McFeely 7 September 2014 в 09:54

Вы можете просто использовать метод контроллера следующим образом:

@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<?> uploadFile(
    @RequestParam("file") MultipartFile file) {

  try {
    // Handle the received file here
    // ...
  }
  catch (Exception e) {
    return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
  }

  return new ResponseEntity<>(HttpStatus.OK);
} // method uploadFile

Без каких-либо дополнительных конфигураций для Spring Boot.

Используя следующую клиентскую часть html-формы:

<html>
<body>
  <form action="/uploadFile" method="POST" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="Upload"> 
  </form>
</body>
</html>

Если вы хотите установить ограничения на размер файлов, вы можете сделать это в application.properties:

# File size limit
multipart.maxFileSize = 3Mb

# Total request size for a multipart/form-data
multipart.maxRequestSize = 20Mb

Кроме того, чтобы отправить файл с Ajax, посмотрите здесь: http://blog.netgloo.com/2015/02/08/spring-boot-file-upload-with-ajax/

18
ответ дан Andrea 19 August 2018 в 07:27
поделиться
   @Bean
    MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize("5120MB");
        factory.setMaxRequestSize("5120MB");
        return factory.createMultipartConfig();
    }

помещает его в класс, где вы определяете beans

3
ответ дан Ashutosh Jha 19 August 2018 в 07:27
поделиться
1
ответ дан dat3450 19 August 2018 в 07:27
поделиться

В контроллере ваш метод должен быть:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
    public ResponseEntity<SaveResponse> uploadAttachment(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
....

Кроме того, вам необходимо обновить application.yml (или application.properties), чтобы поддерживать максимальный размер файла и размер запроса.

spring:
    http:
        multipart:
            max-file-size: 5MB
            max-request-size: 20MB
1
ответ дан THIMIRA 19 August 2018 в 07:27
поделиться

Последняя версия SpringBoot упрощает загрузку нескольких файлов. На стороне браузера вам просто нужна стандартная форма отправки HTML, но с несколькими входными элементами (по одному на один файл для загрузки, что очень важно), все из которых имеют одинаковое имя элемента (name = "files" для примера ниже)

Тогда в вашем классе Spring @Controller на сервере все, что вам нужно, это что-то вроде этого:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
    public @ResponseBody ResponseEntity<?> upload(
        @RequestParam("files") MultipartFile[] uploadFiles) throws Exception     
{
    ...now loop over all uploadFiles in the array and do what you want
  return new ResponseEntity<>(HttpStatus.OK);
}

Это сложные штуки. То есть, зная, что создавать несколько входных элементов, каждый из которых называется «файлы», и знать, использовать MultipartFile [] (массив), поскольку параметр запроса - это сложные вещи, которые нужно знать, но это просто так просто. Я не буду разбираться в обработке записи MultipartFile, потому что на ней уже много документов.

5
ответ дан user 19 August 2018 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: