-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
199 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
--- | ||
title: Header | ||
--- | ||
|
||
LightCall 提供了 HTTP Header 的支持。 | ||
|
||
!!! danger "注意" | ||
|
||
LightCall 支持多种 Header 的传递方式,包括 `@Header` 和 `@Headers` 两种。 | ||
|
||
!!! | ||
|
||
### 用法 | ||
|
||
```java | ||
@Get("/posts") | ||
List<Post> getPosts( | ||
@Header("Authorization") String authorization | ||
); | ||
``` | ||
|
||
该示例中的 `getPosts` 是一个 HTTP GET 请求,请求路径是 `/posts`,请求头是 `Authorization`。 | ||
|
||
### `@Header` | ||
|
||
--- | ||
|
||
!!! info "注意" | ||
|
||
`@Header` 注解只能在参数上使用。 | ||
|
||
!!! | ||
|
||
```java | ||
@Get("/posts") | ||
List<Post> getPosts( | ||
@Header("Authorization") String authorization | ||
) | ||
``` | ||
|
||
该示例中的 `getPosts` 是一个 HTTP GET 请求,请求路径是 `/posts`,请求头是 `Authorization`。系统会自动将 `authorization` 参数的值传递到请求头中。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,4 +4,5 @@ site: | |
|
||
nav: | ||
- 文档: | ||
- /usage/header | ||
- /usage/get |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package org.devlive.lightcall; | ||
|
||
import lombok.Getter; | ||
import okhttp3.HttpUrl; | ||
import okhttp3.Request; | ||
|
||
@Getter | ||
public class RequestContext | ||
{ | ||
private final HttpUrl.Builder urlBuilder; | ||
private final Request.Builder requestBuilder; | ||
|
||
private RequestContext(HttpUrl.Builder urlBuilder, Request.Builder requestBuilder) | ||
{ | ||
this.urlBuilder = urlBuilder; | ||
this.requestBuilder = requestBuilder; | ||
} | ||
|
||
public static RequestContext create(String baseUrl) | ||
{ | ||
HttpUrl.Builder urlBuilder = HttpUrl.parse(baseUrl).newBuilder(); | ||
Request.Builder requestBuilder = new Request.Builder(); | ||
return new RequestContext(urlBuilder, requestBuilder); | ||
} | ||
} |
17 changes: 17 additions & 0 deletions
17
src/main/java/org/devlive/lightcall/annotation/Header.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package org.devlive.lightcall.annotation; | ||
|
||
import java.lang.annotation.Documented; | ||
import java.lang.annotation.ElementType; | ||
import java.lang.annotation.Retention; | ||
import java.lang.annotation.RetentionPolicy; | ||
import java.lang.annotation.Target; | ||
|
||
@Documented | ||
@Target(ElementType.PARAMETER) | ||
@Retention(RetentionPolicy.RUNTIME) | ||
public @interface Header | ||
{ | ||
String value(); | ||
|
||
boolean required() default true; | ||
} |
57 changes: 57 additions & 0 deletions
57
src/main/java/org/devlive/lightcall/handler/HeaderHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
package org.devlive.lightcall.handler; | ||
|
||
import lombok.extern.slf4j.Slf4j; | ||
import okhttp3.Request; | ||
import org.devlive.lightcall.annotation.Header; | ||
|
||
import java.lang.reflect.Parameter; | ||
|
||
@Slf4j | ||
public class HeaderHandler | ||
implements ParameterHandler | ||
{ | ||
private final Request.Builder requestBuilder; | ||
|
||
private HeaderHandler(Request.Builder requestBuilder) | ||
{ | ||
this.requestBuilder = requestBuilder; | ||
} | ||
|
||
public static HeaderHandler create(Request.Builder requestBuilder) | ||
{ | ||
return new HeaderHandler(requestBuilder); | ||
} | ||
|
||
@Override | ||
public boolean canHandle(Parameter parameter) | ||
{ | ||
return parameter.isAnnotationPresent(Header.class); | ||
} | ||
|
||
@Override | ||
public String handle(Parameter parameter, Object arg, String path) | ||
{ | ||
// 处理参数级 @Header | ||
if (parameter != null && parameter.isAnnotationPresent(Header.class)) { | ||
handleParameterHeader(parameter, arg); | ||
} | ||
return path; | ||
} | ||
|
||
private void handleParameterHeader(Parameter parameter, Object arg) | ||
{ | ||
Header annotation = parameter.getAnnotation(Header.class); | ||
String headerName = annotation.value(); | ||
|
||
if (arg == null) { | ||
if (annotation.required()) { | ||
throw new IllegalArgumentException( | ||
String.format("Header '%s' is required but was null", headerName)); | ||
} | ||
return; | ||
} | ||
|
||
log.debug("Adding parameter header - {}: {}", headerName, arg); | ||
requestBuilder.addHeader(headerName, String.valueOf(arg)); | ||
} | ||
} |
7 changes: 4 additions & 3 deletions
7
src/main/java/org/devlive/lightcall/handler/ParameterHandlerFactory.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,18 @@ | ||
package org.devlive.lightcall.handler; | ||
|
||
import okhttp3.HttpUrl; | ||
import org.devlive.lightcall.RequestContext; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
public class ParameterHandlerFactory | ||
{ | ||
public static List<ParameterHandler> createHandlers(HttpUrl.Builder urlBuilder) | ||
public static List<ParameterHandler> createHandlers(RequestContext context) | ||
{ | ||
List<ParameterHandler> handlers = new ArrayList<>(); | ||
handlers.add(RequestParamHandler.create(urlBuilder)); | ||
handlers.add(RequestParamHandler.create(context.getUrlBuilder())); | ||
handlers.add(PathVariableHandler.create()); | ||
handlers.add(HeaderHandler.create(context.getRequestBuilder())); | ||
return handlers; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters