1

我设置了以下控制器:

@PreAuthorize("hasAuthority('ROLE_USER')")
@RequestMapping(value = "/me/avatar", method = RequestMethod.POST)
public @ResponseBody boolean setAvatar(Principal principal, MultipartHttpServletRequest request) {

    String username = ((User) ((OAuth2Authentication) principal).getPrincipal()).getUsername();

    MultipartFile file = request.getFile("avatar");
    return Boolean.TRUE;
}

当我使用 Square Retrofit 发布到这个控制器时:

@Multipart
@POST("/user/me/avatar?access_token={access_token}")
void uploadAvatar(@Name("access_token") String accessToken, @Name("avatar") TypedFile image, retrofit.http.Callback<Boolean> callback);

我得到一个 MultipartHttpServletRequest,它具有“avatar”参数,具有正确的文件名和所有内容,但没有多部分文件。

我做错了什么会导致我得到 MultipartParams 但没有 MultipartFiles?我尝试了各种其他 TypedOutput 格式,但得到了相同的结果。如果我从 Postman(一个 Chrome 插件)点击同一个控制器,一切都会按预期工作,让我认为这是 Retrofit 中的错误?

4

1 回答 1

1

这是由于 Retrofit 中的一个错误,该错误已在今天得到修复。上面的代码现在可以将文件从 Retrofit 上传到基于 Spring 的 api 服务器。

于 2013-04-16T00:16:54.810 回答