获取 headers 假装 netflix
Get headers feign netflix
我正在使用 netflix feign 与微服务通信。
所以我的微服务 A 有一个操作 'OperationA',它被微服务 B 使用,它通过 header 将一个名为 X-Total 的参数传递给 B
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.add("X-Total", page.getTotalSize());
我的客户端界面如下:
@Headers({
"Content-Type: " + MediaType.APPLICATION_JSON_UTF8_VALUE
})
@RequestLine("GET Dto/")
List<Dto> search();
static DtoClient connect() {
return Feign.builder()
.encoder(new GsonEncoder())
.decoder(new GsonDecoder())
.target(ConditionTypeClient.class, Urls.SERVICE_URL.toString());
}
然后我得到了 dto 的列表,但我不知道如何获得 header X-TOTAL 参数:
public List<Dto> search() {
DtoClient client = DtoClient.connect();
return client.search();
}
如何获取 header 参数?
自定义解码器
您可以使用自定义解码器:
public class CustomDecoder extends GsonDecoder {
private Map<String, Collection<String>> headers;
@Override
public Object decode(Response response, Type type) throws IOException {
headers = response.headers();
return super.decode(response, type);
}
public Map<String, Collection<String>> getHeaders() {
return headers;
}
}
Return 回应
其他解决方案可以是 return 响应而不是 List<Dto>
:
@Headers({
"Content-Type: " + MediaType.APPLICATION_JSON_UTF8_VALUE
})
@RequestLine("GET Dto/")
Response search();
然后反序列化body得到headers:
Response response = Client.search();
response.headers();
Gson gson = new Gson();
gson.fromJson(response.body().asReader(), Dto.class);
我参加聚会要迟到了,但我知道这对将来的某个人会有帮助
我们可以将 response
包装到 ResponseEntity<SomePojo>
中,这样我们就可以像 headers 对象一样访问 body 类型 SomePojo
.
...
import org.springframework.http.ResponseEntity;
...
public ResponseEntity<List<Dto>> search() {
DtoClient client = DtoClient.connect();
return client.search();
}
我正在使用 netflix feign 与微服务通信。
所以我的微服务 A 有一个操作 'OperationA',它被微服务 B 使用,它通过 header 将一个名为 X-Total 的参数传递给 B
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.add("X-Total", page.getTotalSize());
我的客户端界面如下:
@Headers({
"Content-Type: " + MediaType.APPLICATION_JSON_UTF8_VALUE
})
@RequestLine("GET Dto/")
List<Dto> search();
static DtoClient connect() {
return Feign.builder()
.encoder(new GsonEncoder())
.decoder(new GsonDecoder())
.target(ConditionTypeClient.class, Urls.SERVICE_URL.toString());
}
然后我得到了 dto 的列表,但我不知道如何获得 header X-TOTAL 参数:
public List<Dto> search() {
DtoClient client = DtoClient.connect();
return client.search();
}
如何获取 header 参数?
自定义解码器
您可以使用自定义解码器:
public class CustomDecoder extends GsonDecoder {
private Map<String, Collection<String>> headers;
@Override
public Object decode(Response response, Type type) throws IOException {
headers = response.headers();
return super.decode(response, type);
}
public Map<String, Collection<String>> getHeaders() {
return headers;
}
}
Return 回应
其他解决方案可以是 return 响应而不是 List<Dto>
:
@Headers({
"Content-Type: " + MediaType.APPLICATION_JSON_UTF8_VALUE
})
@RequestLine("GET Dto/")
Response search();
然后反序列化body得到headers:
Response response = Client.search();
response.headers();
Gson gson = new Gson();
gson.fromJson(response.body().asReader(), Dto.class);
我参加聚会要迟到了,但我知道这对将来的某个人会有帮助
我们可以将 response
包装到 ResponseEntity<SomePojo>
中,这样我们就可以像 headers 对象一样访问 body 类型 SomePojo
.
...
import org.springframework.http.ResponseEntity;
...
public ResponseEntity<List<Dto>> search() {
DtoClient client = DtoClient.connect();
return client.search();
}