Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
thythm
ribbon
提交
aebc2c45
R
ribbon
项目概览
thythm
/
ribbon
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
ribbon
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
aebc2c45
编写于
6月 23, 2014
作者:
T
Tomasz Bak
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add @Http annotations that aggregates HTTP methods (@GET/@POST/...),
path and possibly other values if required in the future.
上级
895eeff5
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
42 addition
and
74 deletion
+42
-74
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/typedclient/MethodTemplate.java
...ix/ribbonclientextensions/typedclient/MethodTemplate.java
+13
-27
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/typedclient/annotation/Http.java
...x/ribbonclientextensions/typedclient/annotation/Http.java
+13
-1
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/typedclient/annotation/POST.java
...x/ribbonclientextensions/typedclient/annotation/POST.java
+0
-11
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/typedclient/annotation/Path.java
...x/ribbonclientextensions/typedclient/annotation/Path.java
+0
-12
ribbon-client-extensions/src/test/java/com/netflix/ribbonclientextensions/typedclient/MethodTemplateTest.java
...ibbonclientextensions/typedclient/MethodTemplateTest.java
+1
-1
ribbon-client-extensions/src/test/java/com/netflix/ribbonclientextensions/typedclient/sample/SampleBrokenTypedMovieService.java
...ons/typedclient/sample/SampleBrokenTypedMovieService.java
+5
-4
ribbon-client-extensions/src/test/java/com/netflix/ribbonclientextensions/typedclient/sample/SampleTypedMovieService.java
...xtensions/typedclient/sample/SampleTypedMovieService.java
+5
-9
ribbon-client-extensions/src/test/java/com/netflix/ribbonclientextensions/typedclient/sample/SampleUntypedMovieService.java
...ensions/typedclient/sample/SampleUntypedMovieService.java
+5
-9
未找到文件。
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/typedclient/MethodTemplate.java
浏览文件 @
aebc2c45
...
...
@@ -2,9 +2,8 @@ package com.netflix.ribbonclientextensions.typedclient;
import
com.netflix.ribbonclientextensions.RibbonRequest
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Content
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.GET
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.POST
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Path
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Http
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Http.HttpMethod
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.TemplateName
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Var
;
...
...
@@ -25,15 +24,10 @@ import static java.lang.String.*;
* @author Tomasz Bak
*/
public
class
MethodTemplate
{
public
static
enum
HttpMethod
{
GET
,
POST
}
private
static
final
MethodTemplate
[]
EMPTY_ARRAY
=
new
MethodTemplate
[]{};
private
final
String
templateName
;
private
final
HttpMethod
httpMethod
;
private
final
Http
.
Http
Method
httpMethod
;
private
final
Method
method
;
private
final
String
path
;
private
final
String
[]
paramNames
;
...
...
@@ -42,9 +36,10 @@ public class MethodTemplate {
public
MethodTemplate
(
Method
method
)
{
this
.
method
=
method
;
this
.
httpMethod
=
extractHttpMethod
();
Http
httpAnnotation
=
extractHttpAnnotation
();
this
.
httpMethod
=
httpAnnotation
.
method
();
this
.
path
=
httpAnnotation
.
path
();
this
.
templateName
=
extractTemplateName
();
this
.
path
=
extractPathInfo
();
Object
[]
nameIdxPair
=
extractParamNamesWithIndexes
();
this
.
paramNames
=
(
String
[])
nameIdxPair
[
0
];
this
.
valueIdxs
=
(
int
[])
nameIdxPair
[
1
];
...
...
@@ -92,18 +87,14 @@ public class MethodTemplate {
return
list
.
toArray
(
EMPTY_ARRAY
);
}
private
HttpMethod
extractHttpMethod
()
{
Annotation
annotation
=
method
.
getAnnotation
(
GET
.
class
);
if
(
null
!=
annotation
)
{
return
HttpMethod
.
GET
;
}
annotation
=
method
.
getAnnotation
(
POST
.
class
);
if
(
null
!=
annotation
)
{
return
HttpMethod
.
POST
;
private
Http
extractHttpAnnotation
()
{
Http
annotation
=
method
.
getAnnotation
(
Http
.
class
);
if
(
null
==
annotation
)
{
throw
new
IllegalArgumentException
(
format
(
"Method %s.%s misses @Http annotation"
,
method
.
getDeclaringClass
().
getSimpleName
(),
method
.
getName
()));
}
throw
new
IllegalArgumentException
(
format
(
"Method %s.%s does not specify HTTP method with @GET or @POST annotation"
,
method
.
getDeclaringClass
().
getSimpleName
(),
method
.
getName
()));
return
annotation
;
}
private
String
extractTemplateName
()
{
...
...
@@ -111,11 +102,6 @@ public class MethodTemplate {
return
(
annotation
!=
null
)
?
annotation
.
value
()
:
null
;
}
private
String
extractPathInfo
()
{
Path
annotation
=
method
.
getAnnotation
(
Path
.
class
);
return
(
annotation
!=
null
)
?
annotation
.
value
()
:
null
;
}
private
Object
[]
extractParamNamesWithIndexes
()
{
List
<
String
>
nameList
=
new
ArrayList
<
String
>();
List
<
Integer
>
idxList
=
new
ArrayList
<
Integer
>();
...
...
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/typedclient/annotation/
GET
.java
→
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/typedclient/annotation/
Http
.java
浏览文件 @
aebc2c45
...
...
@@ -5,7 +5,19 @@ import java.lang.annotation.Retention;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* @author Tomasz Bak
*/
@Target
({
ElementType
.
METHOD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
GET
{
public
@interface
Http
{
enum
HttpMethod
{
GET
,
POST
};
HttpMethod
method
();
String
path
()
default
""
;
}
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/typedclient/annotation/POST.java
已删除
100644 → 0
浏览文件 @
895eeff5
package
com.netflix.ribbonclientextensions.typedclient.annotation
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
@Target
({
ElementType
.
METHOD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
POST
{
}
ribbon-client-extensions/src/main/java/com/netflix/ribbonclientextensions/typedclient/annotation/Path.java
已删除
100644 → 0
浏览文件 @
895eeff5
package
com.netflix.ribbonclientextensions.typedclient.annotation
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
@Target
({
ElementType
.
METHOD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
Path
{
public
String
value
()
default
""
;
}
ribbon-client-extensions/src/test/java/com/netflix/ribbonclientextensions/typedclient/MethodTemplateTest.java
浏览文件 @
aebc2c45
...
...
@@ -47,7 +47,7 @@ public class MethodTemplateTest {
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
testMissingHttpMethod
()
throws
Exception
{
new
MethodTemplate
(
methodByName
(
SampleBrokenTypedMovieService
.
class
,
"missingHttp
Method
"
));
new
MethodTemplate
(
methodByName
(
SampleBrokenTypedMovieService
.
class
,
"missingHttp
Annotation
"
));
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
...
...
ribbon-client-extensions/src/test/java/com/netflix/ribbonclientextensions/typedclient/sample/SampleBrokenTypedMovieService.java
浏览文件 @
aebc2c45
...
...
@@ -2,18 +2,19 @@ package com.netflix.ribbonclientextensions.typedclient.sample;
import
com.netflix.ribbonclientextensions.RibbonRequest
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Content
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.GET
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Http
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Http.HttpMethod
;
/**
* @author Tomasz Bak
*/
public
interface
SampleBrokenTypedMovieService
{
@
GET
@
Http
(
method
=
HttpMethod
.
GET
)
public
Movie
returnTypeNotRibbonRequest
();
public
Movie
missingHttp
Method
();
public
Movie
missingHttp
Annotation
();
@
GET
@
Http
(
method
=
HttpMethod
.
GET
)
public
RibbonRequest
<
Void
>
multipleContentParameters
(
@Content
Movie
content1
,
@Content
Movie
content2
);
}
ribbon-client-extensions/src/test/java/com/netflix/ribbonclientextensions/typedclient/sample/SampleTypedMovieService.java
浏览文件 @
aebc2c45
...
...
@@ -3,10 +3,9 @@ package com.netflix.ribbonclientextensions.typedclient.sample;
import
com.netflix.ribbonclientextensions.RibbonRequest
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Cache
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Content
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.GET
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Http
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Http.HttpMethod
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Hystrix
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.POST
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Path
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.TemplateName
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Var
;
...
...
@@ -18,19 +17,16 @@ public interface SampleTypedMovieService {
@TemplateName
(
"findMovieById"
)
@Cache
(
key
=
"movie.{id}"
)
@GET
@Path
(
"/movies/{id}"
)
@Http
(
method
=
HttpMethod
.
GET
,
path
=
"/movies/{id}"
)
RibbonRequest
<
Movie
>
findMovieById
(
@Var
(
"id"
)
String
id
);
@TemplateName
(
"findMovie"
)
@Cache
(
key
=
"movie#name={name},author={author}"
)
@GET
@Path
(
"/movies?name={name}&author={author}"
)
@Http
(
method
=
HttpMethod
.
GET
,
path
=
"/movies?name={name}&author={author}"
)
RibbonRequest
<
Movie
>
findMovie
(
@Var
(
"name"
)
String
name
,
@Var
(
"author"
)
String
author
);
@TemplateName
(
"registerMovie"
)
@Hystrix
(
name
=
"postMovie"
)
@POST
@Path
(
"/movies"
)
@Http
(
method
=
HttpMethod
.
POST
,
path
=
"/movies"
)
RibbonRequest
<
Void
>
registerMovie
(
@Content
Movie
movie
);
}
ribbon-client-extensions/src/test/java/com/netflix/ribbonclientextensions/typedclient/sample/SampleUntypedMovieService.java
浏览文件 @
aebc2c45
...
...
@@ -3,10 +3,9 @@ package com.netflix.ribbonclientextensions.typedclient.sample;
import
com.netflix.ribbonclientextensions.RibbonRequest
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Cache
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Content
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.GET
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Http
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Http.HttpMethod
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Hystrix
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.POST
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Path
;
import
com.netflix.ribbonclientextensions.typedclient.annotation.Var
;
import
io.netty.buffer.ByteBuf
;
...
...
@@ -17,17 +16,14 @@ import io.netty.buffer.ByteBuf;
public
interface
SampleUntypedMovieService
{
@Cache
(
key
=
"movie.{id}"
)
@GET
@Path
(
"/movies/{id}"
)
@Http
(
method
=
HttpMethod
.
GET
,
path
=
"/movies/{id}"
)
RibbonRequest
<
ByteBuf
>
findMovieById
(
@Var
(
"id"
)
String
id
);
@Cache
(
key
=
"movie#name={name},author={author}"
)
@GET
@Path
(
"/movies?name={name}&author={author}"
)
@Http
(
method
=
HttpMethod
.
GET
,
path
=
"/movies?name={name}&author={author}"
)
RibbonRequest
<
ByteBuf
>
findMovie
(
@Var
(
"name"
)
String
name
,
@Var
(
"author"
)
String
author
);
@Hystrix
(
name
=
"postMovie"
)
@POST
@Path
(
"/movies"
)
@Http
(
method
=
HttpMethod
.
POST
,
path
=
"/movies"
)
RibbonRequest
<
Void
>
registerMovie
(
@Content
ByteBuf
movie
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录