Получение файла с модельным полем весной mvc - PullRequest
0 голосов
/ 11 июня 2018

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

@RequestMapping(value="/products", method=RequestMethod.POST)
    public String saveProduct(@Valid @ModelAttribute("product") Product product, BindingResult result){
    if (result.hasErrors()) {
       return "manageProduct";
    }
}

в классе модели с некоторыми другими полями

@Entity
public class Product {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

private String code;

@NotBlank(message = "Product name can't be blank")
private String name;

@NotBlank(message = "Brand name can't be blank")
private String brand;

@NotBlank(message = "Description can't be blank.")
@Size(min = 10, max = 500, message = "Description shoud be contain 10 and 500 characters")
@JsonIgnore
private String description;

@Min(value = 1)
@Column(name = "unit_price")
private float unitPrice;

private int quantity;

@JsonIgnore
@Column(name = "is_active")
@OrderBy("id ASC")
private boolean active;

@Column(name = "category_id")
@JsonIgnore
private int categoryId;

@Column(name = "supplier_id")
@JsonIgnore
private int supplierId;

private int purchases = 0;

private int views = 0;

@Transient
private MultipartFile file;

//getters and setters
}

form также enctype = "multipart / form-data" и методом "post".При попытке загрузить файл с другими полями, возникает ошибка.И я использую пружинный ботинок.

1 Ответ

0 голосов
/ 12 июня 2018

Если вы используете Spring Data и JPA, тогда Spring Content предоставляет решение для загрузки и ассоциирования контента с вашей сущностью.

Поскольку вы используете Spring Boot, его легко добавить.Добавьте следующие зависимости:

pom.xml

   <!-- Java API -->
   <dependency>
      <groupId>com.github.paulcwarren</groupId>
      <artifactId>spring-content-jpa-boot-starter</artifactId>
      <version>0.0.11</version>     <!-- Or 0.1.0 for Spring Boot 2 -->
   </dependency>
   <!-- REST API -->
   <dependency>
      <groupId>com.github.paulcwarren</groupId>
      <artifactId>spring-content-rest-boot-starter</artifactId>
      <version>0.0.11</version>     <!-- Or 0.1.0 for Spring Boot 2 -->
   </dependency>

Добавьте следующие атрибуты к вашей сущности Product, чтобы с ней можно было связать контент (этовместо поля с несколькими файлами):

Product.java

@Entity
public class Product {

   ...existing fields...

   @ContentId
   private String contentId;

   @ContentLength
   private long contentLength = 0L;

   @MimeType
   private String mimeType;

   // no need for MultipartFile

Создать ContentStore (эквивалент JpaRepository для BLOB):

ProductContentStore.java

@StoreRestResource(path="productsContent")
public interface ProductContentStore extends ContentStore<Product, String> {
}

При запуске приложения Spring Content увидит интерфейс ProductContentStore и зависимость spring-content-jpa и внедрит реализацию этого интерфейса в JPA.потому что вы имеете в виду, что вам не нужно писать это самостоятельно.Он также увидит зависимость spring-content-rest и добавит реализацию @Controller, которая перенаправляет запросы GET, PUT, POST и DELETE REST на бин ProductContentStore, что означает, что вам также не нужно писать этот контроллер.Конечные точки REST будут доступны в /productsContent, поэтому ...

после создания вашего продукта и получения идентификатора вы можете:

curl -X POST -F "image=@/some/local/path/product.jpg" /productsContent/{productId}

загрузить product.jpg и свяжите его с вашей сущностью продукта.И:

curl /productsContent/{productId} получит его снова.

Да, это означает, что вам нужно ДВА запроса на создание продукта и связывание с ним изображения.Если у вас есть веские причины, объясняющие, почему это должен быть один запрос, а не два, тогда поднимите проблему с репозиторием Spring Content github, и мы можем рассмотреть возможность добавления поддержки для вас.

HTH

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