【问题标题】:how to upload multipart request using retrofit library?如何使用改造库上传多部分请求?
【发布时间】:2015-05-02 15:40:50
【问题描述】:

我有一个这样的网络服务控制器类

public class User {
    private String customer; // JSON string
    private CommonsMultipartFile photo1;
    private CommonsMultipartFile photo2;
    private CommonsMultipartFile photo3;
    private CommonsMultipartFile photo4;
    public User() {}
    public User(String customer, CommonsMultipartFile photo1, CommonsMultipartFile photo2, 
            CommonsMultipartFile photo3,CommonsMultipartFile photo4) { 
        this.customer = customer; this.photo1= photo1; this.photo2= photo2; 
        this.photo3= photo3; this.photo4= photo4;}
    public String getCustomer() { return customer; }
    public CommonsMultipartFile getPhoto1() { return Photo1; }
    public CommonsMultipartFile getPhoto2() { return Photo2; }
    public CommonsMultipartFile getPhoto3() { return Photo3; }
    public CommonsMultipartFile getPhoto4() { return Photo4; }
}    


    @RequestMapping(value = "/create",method = RequestMethod.POST, produces = "application/json")
public ResponseEntity<String> createCustomerWithKYC(User user) throws Exception {
            CustomerWSDto customerWSDto = new JSONDeserializer<CustomerWSDto>().use(null, CustomerWSDto.class).deserialize(user.getCustomer());
    Customer customer = customerAssem.fromDto(customerWSDto);
    CustomerDto customerDto = customerAssem.toDto(customer);
    customerDto.getphoto1().setphoto1(user.photo1);
    customerDto.getphoto1().setphoto2(user.photo2);
    customerDto.getphoto1().setphoto3(user.photo3);
    customerDto.getphoto1().setphoto4(user.photo4);
    customerService.createCustomer(customerDto);
    return new ResponseEntity<String>(new JSONSerializer().exclude("*.class").serialize(customerDto), HttpStatus.OK);
}

上面的 create() 方法接受 User 类型的对象。

在客户端应用程序中,我使用改造调用此 Web 服务,如下所示

@Multipart
    @POST("/create")
    void createUser(@Part("user") User user,
                               @PartMap Map<String,TypedFile> files,
                               Callback<Customer> callback);

但它没有给我在服务器端的控制器类中找到的默认构造函数。请检查我在哪里做错了。请解决这个问题。

【问题讨论】:

  • “请解决这个问题”。我们不会给你代码,仅此而已。
  • 将 User 类创建为一个简单的 POJO,构造函数为空,并为所有属性提供 setter 和 getter。
  • 我提供了所有的 setter 和 getter。但我没有在这里展示。因为明白了。我的客户端有什么问题吗?那是多部分请求?

标签: java android json spring-mvc retrofit


【解决方案1】:

将 User 类创建为简单的 POJO,构造函数为空,并为所有属性提供 setter 和 getter。

public class User {
    private String user; // JSON string
    private CommonsMultipartFile photo1;
    private CommonsMultipartFile photo2;
    private CommonsMultipartFile photo3;
    private CommonsMultipartFile photo4;

    Public user(){}

    Public CommonsMultipartFile getPhoto1(){
        return photo1;
    }

    Public setPhoto1(CommonsMultipartFile photo1){
        this.photo1 = photo1;
    }

    ...

}
```

【讨论】:

  • 我认为 Setter 不是必需的。因为在 created() 中已经有一个用户类型的对象..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
相关资源
最近更新 更多