【问题标题】: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+文件的方法,我想我将不得不坚持下去。

标签: java spring file-upload postman


【解决方案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' }

【讨论】:

  • 如果有另一个层次嵌套在里面怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 2018-09-15
  • 2016-12-28
  • 2017-08-17
  • 1970-01-01
  • 2019-01-20
相关资源
最近更新 更多