1:多客户端时,feign接口抽取到公共jar中,此时,客户端的启动类上需要对该jar中feign所在的包进行扫描,要在spring和feign中同时注册,否则启动时会报:“consider defining a bean of type '******feign' in your configuration.”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@springbootapplication @enabletransactionmanagement @enablediscoveryclient @componentscan (basepackages={ "com.lcamtech.aidis.feign" , "com.lcamtech.aiads.dts" }) @enablefeignclients (basepackages = { "com.lcamtech.aidis.feign" }) @enablecaching @mapperscan (basepackages = "com.lcamtech.aiads.dts.mapper" ) public class application extends springbootservletinitializer{ public static void main(string[] args) { springapplication.run(application. class , args); } } |
重点:
1
2
|
@componentscan (basepackages={ "com.lcamtech.aidis.feign" , "com.lcamtech.aiads.dts" }) @enablefeignclients (basepackages = { "com.lcamtech.aidis.feign" }) |
aidis包为包含feign的jar, 此时@componentscan还需要同时扫描本项目的包。
2:使用fegin传值时,get变post
1
2
3
4
5
6
7
|
@feignclient (value = "service-name" ) public interface useraccountfeign { @requestmapping (value = "/ac/exist" , method = requestmethod.get) public baseresult isexist( @requestparam ( "mobile" ) string mobile); } |
feign在传递时默认会将数据放在requestbody中,所以会导致默认使用post请求(及时@requestmapping写着get也没用),此时需要在参数列表中声明@requestparam才能进行正常的get请求。
3:feign请求返回复杂对象时
如:
1
2
3
4
5
6
7
|
public class result{ private string code; private string message; private object data; //get/set } |
问题描述:当请求返回的是result的一个对象时,对于该对象内部的data值,会变成一个linkedhashmap,并不会被转换成相应的类对象,若直接强转会报类型错误。
解决方法1:简单转换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/** * @description: 将数据转换到相应的容器 * @param bean * @param clazz * @return * @throws * @author sunf * @date 2018/6/20 10:28 */ public static <t> t convertvalue(object bean, class <t> clazz){ try { objectmapper mapper = new objectmapper(); return mapper.convertvalue(bean, clazz); } catch (exception e){ log.error( "错误的转换:beanutil.convertvalue() --->" + e.getmessage()); return null ; } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://my.oschina.net/dlam/blog/1833356