为什么我的多部分表单数据会转换为 JSON?
Why does my multipart form-data get converted to JSON?
我需要对API做一个POST,其中需要多部分表单数据和一个记录,其中键'json'和值是一个包含[=的字符串24=]对象。
我正在尝试使用 AndroidAnnotations 这样做:
@Post(API_CREATE_PATH + API_KEY)
CreateResponse create(Map<String,String> map);
有效请求如下所示,使用 Postman 完成:
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="json"
{"test":"data"}
----WebKitFormBoundary7MA4YWxkTrZu0gW
而不是那个,实际的请求正文包含 "json":"{"test":"data"}"
,我不明白为什么。
您可以通过这种方式发送多部分POST,如explained in the wiki。
@Rest(rootUrl = "http://company.com/ajax/services", converters = FormHttpMessageConverter.class)
public interface MyRestClient extends RestClientHeaders {
@Post(API_CREATE_PATH + API_KEY)
@RequiresHeader(HttpHeaders.CONTENT_TYPE)
CreateResponse create(MultiValueMap<String,Object> map);
}
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.set("test","data");
client.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.MULTIPART_FORM_DATA_VALUE);
client.create(map);
我需要对API做一个POST,其中需要多部分表单数据和一个记录,其中键'json'和值是一个包含[=的字符串24=]对象。
我正在尝试使用 AndroidAnnotations 这样做:
@Post(API_CREATE_PATH + API_KEY)
CreateResponse create(Map<String,String> map);
有效请求如下所示,使用 Postman 完成:
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="json"
{"test":"data"}
----WebKitFormBoundary7MA4YWxkTrZu0gW
而不是那个,实际的请求正文包含 "json":"{"test":"data"}"
,我不明白为什么。
您可以通过这种方式发送多部分POST,如explained in the wiki。
@Rest(rootUrl = "http://company.com/ajax/services", converters = FormHttpMessageConverter.class)
public interface MyRestClient extends RestClientHeaders {
@Post(API_CREATE_PATH + API_KEY)
@RequiresHeader(HttpHeaders.CONTENT_TYPE)
CreateResponse create(MultiValueMap<String,Object> map);
}
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.set("test","data");
client.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.MULTIPART_FORM_DATA_VALUE);
client.create(map);