Spring mvc 在spring mvc中使用模型字段获取文件
我正在尝试为模型添加一个包含其他字段的文件,但无法将该文件与这些字段绑定。 处理请求Spring mvc 在spring mvc中使用模型字段获取文件,spring-mvc,file-upload,Spring Mvc,File Upload,我正在尝试为模型添加一个包含其他字段的文件,但无法将该文件与这些字段绑定。 处理请求 @RequestMapping(value="/products", method=RequestMethod.POST) public String saveProduct(@Valid @ModelAttribute("product") Product product, BindingResult result){ if (result.hasErrors()) { retu
@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
}
表单也包含enctype=“多部分/表单数据”,方法为“post”。
当尝试上载带有其他字段的文件时,会发生错误。
我使用的是spring boot。假设您使用的是spring数据,然后JPA提供了一个上传内容并将内容与实体关联的解决方案 当您使用SpringBoot时,很容易添加。添加以下依赖项: pom.xml 创建
ContentStore
(相当于blob的JpaRepository):
ProductContentStore.java
@StoreRestResource(path=“productsContent”)
公共接口ProductContentStore扩展了ContentStore{
}
运行应用程序时,Spring内容将看到ProductContentStore
接口和Spring内容jpa
依赖项,并为您注入此接口的jpa实现,这意味着您不必自己编写此接口。它还将看到spring内容rest
依赖关系,并添加@Controller实现,该实现将GET、PUT、POST和DELETE rest请求转发到ProductContentStore
bean,这意味着您也不必编写此控制器。REST端点将在/productsContent
上可用,因此
创建产品并获得ID后,您可以:
curl-xpost-F“image=@/some/local/path/product.jpg”/productsContent/{productId}
上载product.jpg
并将其与您的产品实体关联。以及:
curl/productsContent/{productId}
将再次获取它
是的,这确实意味着您需要两个请求来创建产品并将图像与之关联。如果您有充分的理由证明为什么这需要一个请求而不是两个请求,那么就针对SpringContentGithubRepo提出一个问题,我们可以考虑为您添加支持
HTH您可以发布堆栈跟踪、示例文件属性和完整模型吗?还有,具体的问题是什么?更新了我的模型类,主要是我不能绑定文件和模型类的字段。你不想实际存储文件并与实体关联吗?暂时性有什么好处?尝试过你的方法,并得到了这个错误。internal.org.springframework.content.jpa.boot.autoconfigure.JpaContentAutoConfiguration.databaseInitializer上的错误处理条件。我使用的是mysql。@您使用的是Spring Boot 1还是2?你能提出一个关于github()的完整堆栈跟踪的问题吗?
<!-- 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>
@Entity
public class Product {
...existing fields...
@ContentId
private String contentId;
@ContentLength
private long contentLength = 0L;
@MimeType
private String mimeType;
// no need for MultipartFile
@StoreRestResource(path="productsContent")
public interface ProductContentStore extends ContentStore<Product, String> {
}