Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wd1105040417
retrofit
提交
81a6193a
R
retrofit
项目概览
wd1105040417
/
retrofit
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
retrofit
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
81a6193a
编写于
4月 16, 2019
作者:
J
Jake Wharton
提交者:
GitHub
4月 16, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #3070 from NightlyNexus/eric.2019-04-09.headers-parameter
Support okhttp3.Headers for HeadersMap parameters.
上级
fc14b320
a7755ea4
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
111 addition
and
17 deletion
+111
-17
retrofit/src/main/java/retrofit2/ParameterHandler.java
retrofit/src/main/java/retrofit2/ParameterHandler.java
+20
-4
retrofit/src/main/java/retrofit2/RequestBuilder.java
retrofit/src/main/java/retrofit2/RequestBuilder.java
+11
-3
retrofit/src/main/java/retrofit2/RequestFactory.java
retrofit/src/main/java/retrofit2/RequestFactory.java
+4
-0
retrofit/src/main/java/retrofit2/http/HeaderMap.java
retrofit/src/main/java/retrofit2/http/HeaderMap.java
+7
-6
retrofit/src/test/java/retrofit2/RequestFactoryTest.java
retrofit/src/test/java/retrofit2/RequestFactoryTest.java
+69
-4
未找到文件。
retrofit/src/main/java/retrofit2/ParameterHandler.java
浏览文件 @
81a6193a
...
...
@@ -20,7 +20,6 @@ import java.lang.reflect.Array;
import
java.lang.reflect.Method
;
import
java.util.Map
;
import
javax.annotation.Nullable
;
import
okhttp3.Headers
;
import
okhttp3.MultipartBody
;
import
okhttp3.RequestBody
;
...
...
@@ -230,6 +229,23 @@ abstract class ParameterHandler<T> {
}
}
static
final
class
Headers
extends
ParameterHandler
<
okhttp3
.
Headers
>
{
private
final
Method
method
;
private
final
int
p
;
Headers
(
Method
method
,
int
p
)
{
this
.
method
=
method
;
this
.
p
=
p
;
}
@Override
void
apply
(
RequestBuilder
builder
,
@Nullable
okhttp3
.
Headers
headers
)
{
if
(
headers
==
null
)
{
throw
Utils
.
parameterError
(
method
,
p
,
"Headers parameter must not be null."
);
}
builder
.
addHeaders
(
headers
);
}
}
static
final
class
Field
<
T
>
extends
ParameterHandler
<
T
>
{
private
final
String
name
;
private
final
Converter
<
T
,
String
>
valueConverter
;
...
...
@@ -300,10 +316,10 @@ abstract class ParameterHandler<T> {
static
final
class
Part
<
T
>
extends
ParameterHandler
<
T
>
{
private
final
Method
method
;
private
final
int
p
;
private
final
Headers
headers
;
private
final
okhttp3
.
Headers
headers
;
private
final
Converter
<
T
,
RequestBody
>
converter
;
Part
(
Method
method
,
int
p
,
Headers
headers
,
Converter
<
T
,
RequestBody
>
converter
)
{
Part
(
Method
method
,
int
p
,
okhttp3
.
Headers
headers
,
Converter
<
T
,
RequestBody
>
converter
)
{
this
.
method
=
method
;
this
.
p
=
p
;
this
.
headers
=
headers
;
...
...
@@ -367,7 +383,7 @@ abstract class ParameterHandler<T> {
"Part map contained null value for key '"
+
entryKey
+
"'."
);
}
Headers
headers
=
Headers
.
of
(
okhttp3
.
Headers
headers
=
okhttp3
.
Headers
.
of
(
"Content-Disposition"
,
"form-data; name=\""
+
entryKey
+
"\""
,
"Content-Transfer-Encoding"
,
transferEncoding
);
...
...
retrofit/src/main/java/retrofit2/RequestBuilder.java
浏览文件 @
81a6193a
...
...
@@ -55,6 +55,7 @@ final class RequestBuilder {
private
@Nullable
HttpUrl
.
Builder
urlBuilder
;
private
final
Request
.
Builder
requestBuilder
;
private
final
Headers
.
Builder
headersBuilder
;
private
@Nullable
MediaType
contentType
;
private
final
boolean
hasBody
;
...
...
@@ -73,7 +74,9 @@ final class RequestBuilder {
this
.
hasBody
=
hasBody
;
if
(
headers
!=
null
)
{
requestBuilder
.
headers
(
headers
);
headersBuilder
=
headers
.
newBuilder
();
}
else
{
headersBuilder
=
new
Headers
.
Builder
();
}
if
(
isFormEncoded
)
{
...
...
@@ -98,10 +101,14 @@ final class RequestBuilder {
throw
new
IllegalArgumentException
(
"Malformed content type: "
+
value
,
e
);
}
}
else
{
requestBuilder
.
addHeader
(
name
,
value
);
headersBuilder
.
add
(
name
,
value
);
}
}
void
addHeaders
(
Headers
headers
)
{
headersBuilder
.
addAll
(
headers
);
}
void
addPathParam
(
String
name
,
String
value
,
boolean
encoded
)
{
if
(
relativeUrl
==
null
)
{
// The relative URL is cleared when the first query parameter is set.
...
...
@@ -245,12 +252,13 @@ final class RequestBuilder {
if
(
body
!=
null
)
{
body
=
new
ContentTypeOverridingRequestBody
(
body
,
contentType
);
}
else
{
requestBuilder
.
addHeader
(
"Content-Type"
,
contentType
.
toString
());
headersBuilder
.
add
(
"Content-Type"
,
contentType
.
toString
());
}
}
return
requestBuilder
.
url
(
url
)
.
headers
(
headersBuilder
.
build
())
.
method
(
method
,
body
);
}
...
...
retrofit/src/main/java/retrofit2/RequestFactory.java
浏览文件 @
81a6193a
...
...
@@ -512,6 +512,10 @@ final class RequestFactory {
}
}
else
if
(
annotation
instanceof
HeaderMap
)
{
if
(
type
==
Headers
.
class
)
{
return
new
ParameterHandler
.
Headers
(
method
,
p
);
}
validateResolvableType
(
p
,
type
);
Class
<?>
rawParameterType
=
Utils
.
getRawType
(
type
);
if
(!
Map
.
class
.
isAssignableFrom
(
rawParameterType
))
{
...
...
retrofit/src/main/java/retrofit2/http/HeaderMap.java
浏览文件 @
81a6193a
...
...
@@ -15,9 +15,6 @@
*/
package
retrofit2.http
;
import
static
java
.
lang
.
annotation
.
ElementType
.
PARAMETER
;
import
static
java
.
lang
.
annotation
.
RetentionPolicy
.
RUNTIME
;
import
java.lang.annotation.Annotation
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Retention
;
...
...
@@ -26,11 +23,15 @@ import java.lang.reflect.Type;
import
java.util.Map
;
import
retrofit2.Retrofit
;
import
static
java
.
lang
.
annotation
.
ElementType
.
PARAMETER
;
import
static
java
.
lang
.
annotation
.
RetentionPolicy
.
RUNTIME
;
/**
* Adds headers specified in the {@link Map}.
* Adds headers specified in the {@link Map}
or {@link okhttp3.Headers}
.
* <p>
* Values are converted to strings using {@link Retrofit#stringConverter(Type, Annotation[])}
* (or {@link Object#toString()}, if no matching string converter is installed).
* Values in the map are converted to strings using
* {@link Retrofit#stringConverter(Type, Annotation[])} (or {@link Object#toString()}, if no
* matching string converter is installed).
* <p>
* Simple Example:
* <pre>
...
...
retrofit/src/test/java/retrofit2/RequestFactoryTest.java
浏览文件 @
81a6193a
...
...
@@ -60,6 +60,7 @@ import retrofit2.http.QueryName;
import
retrofit2.http.Tag
;
import
retrofit2.http.Url
;
import
static
java
.
util
.
Arrays
.
asList
;
import
static
java
.
util
.
Collections
.
emptyList
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
junit
.
Assert
.
assertNull
;
...
...
@@ -653,6 +654,70 @@ public final class RequestFactoryTest {
}
}
@Test
public
void
getWithHeaders
()
{
class
Example
{
@GET
(
"/search"
)
Call
<
ResponseBody
>
method
(
@HeaderMap
okhttp3
.
Headers
headers
)
{
throw
new
AssertionError
();
}
}
okhttp3
.
Headers
headers
=
new
okhttp3
.
Headers
.
Builder
()
.
add
(
"Accept"
,
"text/plain"
)
.
add
(
"Accept"
,
"application/json"
)
.
add
(
"Accept-Charset"
,
"utf-8"
)
.
build
();
Request
request
=
buildRequest
(
Example
.
class
,
headers
);
assertThat
(
request
.
method
()).
isEqualTo
(
"GET"
);
assertThat
(
request
.
url
().
toString
()).
isEqualTo
(
"http://example.com/search"
);
assertThat
(
request
.
body
()).
isNull
();
assertThat
(
request
.
headers
().
size
()).
isEqualTo
(
3
);
assertThat
(
request
.
headers
(
"Accept"
)).
isEqualTo
(
asList
(
"text/plain"
,
"application/json"
));
assertThat
(
request
.
header
(
"Accept-Charset"
)).
isEqualTo
(
"utf-8"
);
}
@Test
public
void
getWithHeadersAndHeaderMap
()
{
class
Example
{
@GET
(
"/search"
)
Call
<
ResponseBody
>
method
(
@HeaderMap
okhttp3
.
Headers
headers
,
@HeaderMap
Map
<
String
,
Object
>
headerMap
)
{
throw
new
AssertionError
();
}
}
okhttp3
.
Headers
headers
=
new
okhttp3
.
Headers
.
Builder
()
.
add
(
"Accept"
,
"text/plain"
)
.
add
(
"Accept-Charset"
,
"utf-8"
)
.
build
();
Map
<
String
,
String
>
headerMap
=
Collections
.
singletonMap
(
"Accept"
,
"application/json"
);
Request
request
=
buildRequest
(
Example
.
class
,
headers
,
headerMap
);
assertThat
(
request
.
method
()).
isEqualTo
(
"GET"
);
assertThat
(
request
.
url
().
toString
()).
isEqualTo
(
"http://example.com/search"
);
assertThat
(
request
.
body
()).
isNull
();
assertThat
(
request
.
headers
().
size
()).
isEqualTo
(
3
);
assertThat
(
request
.
headers
(
"Accept"
)).
isEqualTo
(
asList
(
"text/plain"
,
"application/json"
));
assertThat
(
request
.
header
(
"Accept-Charset"
)).
isEqualTo
(
"utf-8"
);
}
@Test
public
void
headersRejectsNull
()
{
class
Example
{
@GET
(
"/"
)
Call
<
ResponseBody
>
method
(
@HeaderMap
okhttp3
.
Headers
headers
)
{
throw
new
AssertionError
();
}
}
try
{
buildRequest
(
Example
.
class
,
(
okhttp3
.
Headers
)
null
);
fail
();
}
catch
(
IllegalArgumentException
e
)
{
assertThat
(
e
).
hasMessage
(
"Headers parameter must not be null. (parameter #1)\n"
+
" for method Example.method"
);
}
}
@Test
public
void
twoBodies
()
{
class
Example
{
@PUT
(
"/"
)
//
...
...
@@ -1889,7 +1954,7 @@ public final class RequestFactoryTest {
MultipartBody
.
Part
part1
=
MultipartBody
.
Part
.
createFormData
(
"foo"
,
"bar"
);
MultipartBody
.
Part
part2
=
MultipartBody
.
Part
.
createFormData
(
"kit"
,
"kat"
);
Request
request
=
buildRequest
(
Example
.
class
,
Arrays
.
asList
(
part1
,
part2
));
Request
request
=
buildRequest
(
Example
.
class
,
asList
(
part1
,
part2
));
assertThat
(
request
.
method
()).
isEqualTo
(
"POST"
);
assertThat
(
request
.
headers
().
size
()).
isZero
();
assertThat
(
request
.
url
().
toString
()).
isEqualTo
(
"http://example.com/foo/bar/"
);
...
...
@@ -1979,7 +2044,7 @@ public final class RequestFactoryTest {
}
}
Request
request
=
buildRequest
(
Example
.
class
,
Arrays
.
asList
(
"pong1"
,
"pong2"
));
Request
request
=
buildRequest
(
Example
.
class
,
asList
(
"pong1"
,
"pong2"
));
assertThat
(
request
.
method
()).
isEqualTo
(
"POST"
);
assertThat
(
request
.
headers
().
size
()).
isZero
();
assertThat
(
request
.
url
().
toString
()).
isEqualTo
(
"http://example.com/foo/bar/"
);
...
...
@@ -2622,7 +2687,7 @@ public final class RequestFactoryTest {
return
null
;
}
}
Request
request
=
buildRequest
(
Example
.
class
,
Arrays
.
asList
(
"bar"
,
null
,
"baz"
));
Request
request
=
buildRequest
(
Example
.
class
,
asList
(
"bar"
,
null
,
"baz"
));
assertThat
(
request
.
method
()).
isEqualTo
(
"GET"
);
okhttp3
.
Headers
headers
=
request
.
headers
();
assertThat
(
headers
.
size
()).
isEqualTo
(
2
);
...
...
@@ -2897,7 +2962,7 @@ public final class RequestFactoryTest {
}
}
List
<
String
>
strings
=
Arrays
.
asList
(
"tag"
,
"value"
);
List
<
String
>
strings
=
asList
(
"tag"
,
"value"
);
Request
request
=
buildRequest
(
Example
.
class
,
strings
);
assertThat
(
request
.
tag
(
List
.
class
)).
isSameAs
(
strings
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录