在用OpenFeign对其他服务进行调用时,其报错信息如下所示:
问题一
feign.FeignException$NotFound: status 404 reading IRegulation#queryOneRule(S
解决方法
这个错误是因为我调规则这个服务时,路径错误了,改下即可。在这里展示下我改之后的代码
@FeignClient(value = "iaep-regulation")
public interface IRegulation {
@GetMapping(value = "/rule/{ruleId}")
public ItooResult queryOneRule(@ApiParam(name ="ruleId")@PathVariable String ruleId);
}
解决完这个错后,又出现了下面的错。
问题二:
class java.util.LinkedHashMap cannot be cast to class com.tfjybj.iaep.provider.model.RuleModel (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; com.tfjybj.iaep.provider.model.RuleModel is in unnamed module of loader 'app'
顾名思义,翻译过来就是无法将linkedHashMap转换为实体类。
解决方法
如果是单个参数,可直接用Map<String,Object>来接收对象。我的代码示例:
//1,根据ruleId查询出规则名称、流程画布id、规则备注
ItooResult ruleList = iRegulation.queryOneRule(ruleId);
Map<String,Object> ruleMapList= (Map<String, Object>) ruleList.getData();
如果是多个参数时,可用json字符串来转换对象:
使用阿里的fastjson来将这个linkedHashMap转换成对象
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
JSON.parseObject(JSON.toJSONString(这里是LinkedHashMap对象), new TypeReference<这里是需要转换成的对象>() {
});
总结
沉得住气,认真思考分析问题,总能解决问题,哪怕是第一次遇见此类问题