spring cloud 使用feign 项目的搭建 在这里就不写了,本文主要讲解在使用过程中遇到的问题以及解决办法

1:示例

 @RequestMapping(value = "/generate/password", method = RequestMethod.POST)
KeyResponse generatePassword(@RequestBody String passwordSeed);
在这里 只能使用 @RequestMapping(value = "/generate/password", method = RequestMethod.POST) 注解 不能使用 @PostMapping 否则项目启动会报
Caused by: java.lang.IllegalStateException: Method generatePassword not annotated with HTTP method type (ex. GET, POST) 异常

2:首次访问超时问题

原因: Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。
而首次请求往往会比较慢(因为Spring的懒加载机制,要实例化一些类),这个响应时间可能就大于1秒了。
解决方法:

<1: 配置Hystrix的超时时间改为5秒

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000

<2:禁用Hystrix的超时时间

hystrix.command.default.execution.timeout.enabled: false

<3:禁用feign的hystrix 功能

feign.hystrix.enabled: false

注: 个人推荐 第一 或者第二种 方法

3:FeignClient接口中,如果使用到@PathVariable ,必须指定其value

spring cloud feign 使用 Apache HttpClient

问题:1 没有指定 Content-Type 是情况下 会出现如下异常 ? 这里很纳闷?

 Caused by: java.lang.IllegalArgumentException: MIME type may not contain reserved characters

在这里有兴趣的朋友可以去研究下源码

 ApacheHttpClient.class
private ContentType getContentType(Request request) {
ContentType contentType = ContentType.DEFAULT_TEXT;
for (Map.Entry<String, Collection<String>> entry : request.headers().entrySet())
// 这里会判断 如果没有指定 Content-Type 属性 就使用上面默认的 text/plain; charset=ISO-8859-1
// 问题出在默认的 contentType : 格式 text/plain; charset=ISO-8859-1
// 转到 ContentType.create(entry.getValue().iterator().next(), request.charset()); 方法中看
if (entry.getKey().equalsIgnoreCase("Content-Type")) {
Collection values = entry.getValue();
if (values != null && !values.isEmpty()) {
contentType = ContentType.create(entry.getValue().iterator().next(), request.charset());
break;
}
}
return contentType;
}
 ContentType.class
public static ContentType create(final String mimeType, final Charset charset) {
final String normalizedMimeType = Args.notBlank(mimeType, "MIME type").toLowerCase(Locale.ROOT);
// 问题在这 check 中 valid f方法中
Args.check(valid(normalizedMimeType), "MIME type may not contain reserved characters");
return new ContentType(normalizedMimeType, charset);
}
private static boolean valid(final String s) {
for (int i = 0; i < s.length(); i++) {
final char ch = s.charAt(i);
// 这里 在上面 text/plain;charset=UTF-8 中出现了 分号 导致检验没有通过
if (ch == '"' || ch == ',' || ch == ';') {
return false;
}
}
return true;
}

解决办法 :

@RequestMapping(value = "/generate/password", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)

注解中指定: Content-Type  即 指定 consumes 的属性值 : 这里 consumes 属性的值在这不做具体讲解,有兴趣的可以去研究下

暂时遇到以上问题, 后续深入学习 时 如有问题 会及时更新, 希望对你有帮助 谢谢

最新文章

  1. arguments 对象
  2. [AC自动机]题目合计
  3. hadoop2.5的伪分布式安装配置
  4. Web Service进阶(五)SOAPBinding方式讲解
  5. 监督学习——logistic进行二分类(python)
  6. C#格式规范
  7. Linux-系统相关命令及配置文件
  8. C#之简易计算器设计
  9. Nowcoder 提高组练习赛-R7
  10. java只使用try和finally不使用catch的原因和场景
  11. php对接网易云信视频直播
  12. css3-自定义字体
  13. Git提交记住用户名和密码
  14. ecmall用户登录后自动退出解决方法
  15. http://www.blogjava.net/xylz/archive/2010/07/08/325587.html
  16. C# 高斯消元项目运用
  17. bluebird的安装配置
  18. php数据连接
  19. python, 面向对象编程Object Oriented Programming(OOP)
  20. 简明Python3教程 6.基础

热门文章

  1. 下载The Swift Programming Language.mobi版
  2. Virtex6 PCIe 超简版基础概念学习(一)
  3. 用VMware 8安装Ubuntu 12.04具体过程(图解)
  4. Eclipse没有 web Project 选项的解决办法
  5. Java 扫描包下所有类(包括jar包)
  6. log4j日志写入数据库
  7. DataUml Design 介绍10 - DataUML 1.4版本功能(增加UML活动图和用例图)
  8. zookeeper安装笔记
  9. MapReduce源码分析之Task中关于对应TaskAttempt存储Map方案的一些思考
  10. Ecshop提示Only variables should be passed by reference in错误