邮递员表单数据发送带有文件的复杂对象

Posted

技术标签:

【中文标题】邮递员表单数据发送带有文件的复杂对象【英文标题】:Postman form-data sending complex object with file 【发布时间】:2019-01-17 19:38:39 【问题描述】:

如何在 Postman 中发送(或者不可能?)带有文件的复杂对象

我的对象:

class Client 
    private String clientName;
    private Platform platform;


class Platform 
    private String android;
    private String ios;

我的控制器类:

@PostMapping(value = "/evaluate", produces = "application/json")
public ResponseEntity<ServerResponse> sendEvaluateForm(Client client,
        @RequestParam(value = "files", required = false) MultipartFile files)

    return new ResponseEntity<>(HttpStatus.OK);

这就是我在邮递员中发送请求的方式:

当我通过客户端中的基本字段“clientName”时它起作用。 但我不知道如何传递平台对象。 我试图传递密钥:平台 并在值:“android”:“asd”,“ios”:“xxx” 但我只有 BadRequest(400)

【问题讨论】:

我认为不可能同时发送 JSON 有效负载和表单数据。您可以将 JSON 作为表单的一部分嵌入,但我认为在这种情况下您需要手动进行解组。不过我不完全确定,所以也许有更多 Spring Web 经验的人可以纠正我(我通常坚持使用 JAX-RS) 感谢您的回复。我想你可能是对的。我尝试以几种不同的方式做到这一点,但这些都不起作用(我的朋友正在向我发送这个 JS 中的表单+文件)。我只能在具有基本值的 1 个对象中获取此表单,但它非常大(大约 100 个字段),这就是为什么我想将它放在单独的对象中。但如果我找不到发送 JSON+文件的方法,我想我将不得不坚持下去。 【参考方案1】:

您可以尝试将客户端数据作为纯字符串发送并在控制器端进行解析。

    @PostMapping(value = "/evaluate", produces = "application/json")
    public ResponseEntity<?> sendEvaluateForm(@RequestParam ("client") String client,
                                                               @RequestParam(value = "files", required = false) MultipartFile files) throws IOException 

        ObjectMapper mapper = new ObjectMapper();
        Client clientobject = mapper.readValue(client, Client.class);

        return ResponseEntity.ok().build();
    

邮递员的要求:

还有你的 POJO 类:

class Client 
    private String clientName;
    private Platform platform;

    public String getClientName() 
        return clientName;
    

    public void setClientName(String clientName) 
        this.clientName = clientName;
    

    public Platform getPlatform() 
        return platform;
    

    public void setPlatform(Platform platform) 
        this.platform = platform;
    


class Platform 
    private String android;
    private String ios;

    public String getAndroid() 
        return android;
    

    public void setAndroid(String android) 
        this.android = android;
    

    public String getIos() 
        return ios;
    

    public void setIos(String ios) 
        this.ios = ios;
    

【讨论】:

哇,我没想过这个主意。谢谢。【参考方案2】:

使用 Postman,您可以构建一个同时包含 FilesObject 的请求。

Result 预期为后端 req.body

street: '69 Pinapple street', city: 'Apple', zip: 6969, country: 'Pen'

【讨论】:

如果有另一个层次嵌套在里面怎么办?

以上是关于邮递员表单数据发送带有文件的复杂对象的主要内容,如果未能解决你的问题,请参考以下文章

在邮递员表单数据中发布嵌套的 json

如何在邮递员的同一请求中发送多部分/表单数据和嵌套 json?

发布邮递员表单数据时请求正文为空

使用表单数据和 axios 发送文件

React - 带有文件和字符串的 Axios POST 表单数据

通过带有 multipart/form-data 的表单发送的文件作为空对象发送