Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用React js在SpringBoot中发送DTO中的多部分文件_Java_Reactjs_Spring Boot_Dto_Form Data - Fatal编程技术网

Java 如何使用React js在SpringBoot中发送DTO中的多部分文件

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

我正在尝试在表单中添加一个图像文件,其中包含一些其他输入

这是我在react(前端)中遵循的内容:

并作为邮寄请求发送

Spring boot Controller的实现如下所示:

@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;