首页 > 解决方案 > 如何在同一请求中传递正文 @RequestBody 和 @RequestParam

问题描述

我正在尝试使用包 dio在同一个请求中传递一个正文和一个参数。

我在 Spring Boot 上有这个方法:

@PostMapping("/guardarproducto")
    public ResponseEntity<Usuario> insertProduct(@RequestBody String body, @RequestParam("imagen") MultipartFile imagen) {
 ....
}

我尝试通过以下方式执行此请求:

FormData formData = new FormData.from({
        "barcode": barcode != null ? this.barcode : null,
        "idUsuario": user.id,
        "nombre": _textController.text,
        "aditivos": aditivosLeidos,
        "imagen": pickedImage
      });
      await dio.post('https://10.0.2.2:8443/api/guardarproducto',
          data: formData);

但我得到:

{
    "timestamp": "2019-07-03T12:11:39.902+0000",
    "status": 400,
    "error": "Bad Request",
    "message": "Required request body is missing: public org.springframework.http.ResponseEntity<ual.dra.rest.Usuario> ual.dra.rest.AditivoController.insertProduct(java.lang.String,org.springframework.web.multipart.MultipartFile)",
    "path": "/api/guardarproducto"
}

如何在同一个请求中传递正文和请求参数?

我不在乎使用 Dio 或 Http 包。

标签: spring-bootflutterdart

解决方案


好的,我不确定颤振和飞镖是如何工作的,但是在春季启动时,当您尝试同时发布两者RequestBodyMultiPart考虑使用@RequestPart

@PostMapping("/guardarproducto")
public ResponseEntity<Usuario> insertProduct(@RequestPart("body") String body,
                                             @RequestPart("imagen") MultipartFile imagen) {
 ....
}

并且在发布正文时FormData,您已将 json 设置在一个对象中。让我们说下面是 json。

{
        "barcode": "XAWA"
        "idUsuario": 1,
        "nombre": 1,
        "aditivos": "1"
}

然后在FormData

FormData formData = new FormData.from({
        "body" : {  "barcode": barcode != null ? this.barcode : null,
                   "idUsuario": user.id,
                  "nombre": _textController.text,
                  "aditivos": aditivosLeidos
                 } 
        "imagen": pickedImage
      });

Note : "body" and "imagen" are in same level.

推荐阅读