Java 如何使用React js在SpringBoot中发送DTO中的多部分文件
我正在尝试在表单中添加一个图像文件,其中包含一些其他输入 这是我在react(前端)中遵循的内容: 并作为邮寄请求发送 Spring boot Controller的实现如下所示:Java 如何使用React js在SpringBoot中发送DTO中的多部分文件,java,reactjs,spring-boot,dto,form-data,Java,Reactjs,Spring Boot,Dto,Form Data,我正在尝试在表单中添加一个图像文件,其中包含一些其他输入 这是我在react(前端)中遵循的内容: 并作为邮寄请求发送 Spring boot Controller的实现如下所示: @RequestMapping(value = "/add",method = RequestMethod.POST,consumes = {MediaType.MULTIPART_FORM_DATA_VALUE,MediaType.APPLICATION_JSON_VALUE}) public Respon
@RequestMapping(value = "/add",method = RequestMethod.POST,consumes = {MediaType.MULTIPART_FORM_DATA_VALUE,MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<?> addCraftItem(@RequestHeader(value = "Authorization") String token, @RequestBody ItemDTO dto) throws Exception {
return ResponseEntity.ok(craftItemService.addItem(dto));
}
我得到了以下例外
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造org.springframework.web.multipart.MultipartFile
(不存在与默认构造类似的创建者):抽象类型需要映射到具体类型、具有自定义反序列化程序或包含其他类型信息
我想知道怎样才能解决这个问题。任何帮助都是值得的。顾名思义,多部分请求本质上是多部分的,这意味着没有单一的主体。因此,
@RequestBody
将不起作用。改为使用带有参数名的@RequestParam
。@KedarJoshi,在我这样做之后@RequestParam(name=“data”)ItemDTO dto,我得到这个错误“状态”:400,“错误”:“错误请求”,“消息”:“必需的ItemDTO参数“数据”不存在”让我再解释一下。提交多部分请求的方式与提交表单请求的方式类似,即数据本质上是名称-值对。因此,@RequestParam(name=“data”)
仅在提交的多部分表单具有data
参数时才起作用?给定的ItemDTO
结构将不适用于多部分请求,因为spring只将参数的请求体或JSON值映射到POJO,而不是整个表单数据。我不知道react是如何工作的,但我假设obj
属性本质上将成为多部分请求参数。在这种情况下,类似于@RequestParam(name=“price”)字符串price
的内容将为您提供price参数的值。@KedarJoshi,感谢您的详细解释,这有助于我更好地理解。
@RequestMapping(value = "/add",method = RequestMethod.POST,consumes = {MediaType.MULTIPART_FORM_DATA_VALUE,MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<?> addCraftItem(@RequestHeader(value = "Authorization") String token, @RequestBody ItemDTO dto) throws Exception {
return ResponseEntity.ok(craftItemService.addItem(dto));
}
@Getter
@Setter
public class ItemDTO implements Serializable {
private long craftId;
private String ciName;
private boolean availabilityStatus;
private double ciPrice;
private MultipartFile imgFile;
private int itemQuantity;
private String shortDescription;
private String longDescription;