发表于: 2018-01-08 16:02:22
1 895
今天完成的事
实现分布式。
比较牛逼的地方就是实现了共同调用接口。
如下
public interface StudentService {
@RequestMapping("StudentServicegetAll")
List<Student> getAll();
@RequestMapping("StudentService")
Integer getStudy();
@RequestMapping("StudentServicegetWork")
Integer getWork();
}
//@EnableAutoConfiguration
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class APP extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(APP.class,args);
}
}
这样就可以做到最方便的Feign调用
@FeignClient("pttengservice")
interface FeatureServiceC extends FeatureService{}
@FeignClient("pttengservice")
interface ProfessionServiceC extends ProfessionService{}
@FeignClient("pttengservice")
interface StudentServiceC extends StudentService{}
@FeignClient("pttengservice")
interface UserServiceC extends UserService{}
然后就会看到
完美匹配。
写接口文档
一、约定
1.查询多个的列表形式如id=2&id=3&id=4这种数据的形式。
2.如无特殊标注,所有的Post和Put操作都以Application/json 的方式提交,这样适合于复杂的模型。 一些简单的操作应注明 “application/x-www-form-urlencoded”
3.所有的返回字段都包含code和Message,code=0为正常,异常以 code为负表示,前端负责展示错误信息。
4.Rest风格
5./u/代表着是必须登录才可以访问的接口 如果不登录会报-6002错误
6.上传图片操作都以multipartFile的方式提交.
7.字段 第几页 page 不写时默认为1
8.字段 展示数量 size 不写时默认为10
前台字段约定:
前台所有接口中的status入参,如果没有特殊标注,全部为必填且值为1.
验证注册:
字段 用户账号状态 userStatus 0-冻结 1-正常 用户注册后默认为1
查询/更新用户详情:
字段 类型 type 0-用户注册/登陆过程中调用接口 1-用户点击"我的"调用接口 2-用户点击"账户设置"调用接口
字段 实名状态 verification 0-未实名 1-已实名 用户注册后默认为0
字段 用户状态 userStatus0-冻结 1-正常
查询交易流水
字段 交易状态 tradeStatus 0-失败 1-成功
字段 交易类型 tradeType 0-还款 1-付款
查询用户消息
字段 消息类型 messageType 0-系统消息 1-公告消息
字段 系统消息类型 autoMessageType 0-投资成功 1-投资失败 2-即将到期 3-正在回款 4-回款成功 5-回款失败 6 续投成功 7 续投失败-1 不是系统消息
字段 发送人群recipient 0-单个用户 1-所有人 2-认证投资人 系统消息为0,公告消息为1或2
字段 类型 sendType 0-定时发送 1-即时发送
字段 同步推送 synchronization 0-否 1-是
字段 状态 messageStatus 0-草稿 1-上线
查询产品
字段 起息方式 chargingInterestWay 0-T+0 1-T+1 2-T+2
字段 角标 flag 0-最新 1-热门 2-普通
字段 精品推荐 recommended 0-所有产品(包括精品推荐) 1-精品推荐产品
字段 限购状态 limited 0-否 1-是
字段 还款方式 paymetBackWay 0-按月付息,到期还本 1-到期一次性还本付息
字段 产品状态 productStatus 0-草稿 1-上线
用户产品
字段 投资类型 investType 0-正常投资 1-续投产品
字段 投资状态 investStatus 0-已退出 1-退出中 2-投资中 3-已续投
查询内容
字段 内容类型 contentType 0-推荐banner图 1-帮助中心 2-关于我们
字段 内容状态 contentStatus 0-草稿 1-上线
查询合同
字段 合同类型 contractType 0-出借咨询与服务协议-新手计划 1-出借咨询与服务协议-按月付息产品 2-出借咨询与服务协议-到期一次性还本付息产品 3-出借确认和债权转让 - 授权委托书
4-催收及诉讼 - 授权委托书 5-出借本金确认书 6-债权转让协议
字段 合同状态 contractStatus 0-用户查看产品合同模版 1-用户查看自己投资的产品的合同
查询回款计划
字段 回款状态 repaymentStatus 0-已还款 1-未还款
剩下的明天再写
收获
Feign的请求参数绑定机制
1 2 3 4 5 6 7 8 | //注意:错误的接口写法 @FeignClient("book") public interface BookApi { @RequestMapping(value = "/hello",method = RequestMethod.GET) String hello(String name); } |
1 2 3 4 5 6 7 | ribbon: eureka: enabled: false book: ribbon: listOfServers: http://localhost:8080 |
1 2 | GET /hello?name=xxx HTTP/1.1 Host: localhost:8080 |
- 并没有按照期望使用GET方式发送请求,而是POST方式
- name参数没有被封装,获得了一个null值
- 在Feign接口中为name添加@RequestParam(“name”)注解,name必须指定,Feign的请求参数不会利用SpringMVC字节码的机制自动给定一个默认的名称。
- 由于Feign默认使用@RequestBody,也可以改造RestController,使用@RequestBody接收。但是,请求参数通常是多个,推荐使用上述的@RequestParam,而@RequestBody一般只用于传递对象。
Feign绑定复合参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @FeignClient("book") public interface BookApi { @RequestMapping(value = "/book",method = RequestMethod.POST) Book book(@RequestBody Book book); // <1> @RequestMapping(value = "/book",method = RequestMethod.POST) Book book(@RequestParam("id") String id,@RequestParam("name") String name); // <2> @RequestMapping(value = "/book",method = RequestMethod.POST) Book book(@RequestParam Map map); // <3> //错误的写法 @RequestMapping(value = "/book",method = RequestMethod.POST) Book book(@RequestParam Book book); // <4> } |
遇到的问题
第一个问题
代码重新写忘记绑定了。
第二个问题
第三个问题
Feign的超时
从Spring Cloud Edgware开始,Feign支持使用属性配置超时:
对于老版本,可以写个feign.Request.Options ,参考:org.springframework.cloud.netflix.feign.ribbon.FeignRibbonClientAutoConfiguration#feignRequestOptions 的写法即可。
明天要做的事
赶紧把接口文档写完
不能再脱了。。。
评论