2020-08-16

Feign:今天学习SpringCloud的过程作,我在写查询方法的时候

服务器端的查询:


//模拟从数据库中取出数据
private static final List<UserInfo> USER_INFO_LIST = new ArrayList();
    static {
        USER_INFO_LIST.add(new UserInfo(1,"tom",21,"男"));
        USER_INFO_LIST.add(new UserInfo(2,"jack",22,"男"));
        USER_INFO_LIST.add(new UserInfo(3,"candy",23,"女"));
        USER_INFO_LIST.add(new UserInfo(4,"rose",24,"女"));
    } 


@Override
    @ResponseBody
    @GetMapping(path = "/findAllEntity")
    public List<UserInfo> findAll(UserInfo userInfo) {
        //先将LIST转换成流,然后filter过滤,过滤得到对象中名字含有name的,最后重新转换为LIST
        return USER_INFO_LIST.stream().filter(user -> {
            boolean flag = true;
//如果名字不为空 判断接受的对象的名字是否在LIST里存在?
            if (userInfo.getName() != null && !userInfo.getName().isEmpty()) {
                if (!user.getName().contains(userInfo.getName())) {
                    return false;
                }
//如果年龄不为空 判断接受的对象的年龄是否在LIST里存在?
                if (userInfo.getAge()!=null) {
                    if(!user.getAge().equals(userInfo.getAge())) {
                        return false;
                    }
                }
//如果性别不为空 判断接受的对象的性别是否在LIST里存在?
                if (userInfo.getSex()!=null && !userInfo.getSex().isEmpty()) {
                    if (!user.getSex().contains(userInfo.getSex())) {
                        return false;
                    }
                }
            }
            return true;
        }).collect(Collectors.toList());
//        return USER_INFO_LIST;
    }

公共部分的接口(feign)(一般将数据库建在公共部分,所以将查询接口也可以写在这里)

/**
 * @author L
 * @FeignClient() 这里写的是服务器的地址
 */
@FeignClient(value = "USER-SERVER")
public interface UserInfoService {

    @GetMapping(path = "/findEntity")
    public List<UserInfo> findEntity(UserInfo userInfo);
}

 

客户端:

/**
 * 这是客户端的访问controller
 */
@RestController
public class UserInfoController implements UserInfoService{

    @Resource
    private UserInfoService userInfoService;

    public List<UserInfo> findEntity(UserInfo userInfo) {
        return userInfoService.findEntity(userInfo);
    }
}

按理说 我公共部分和服务器端都用的是get方式,是可以对应上的,但是问题出来了!

以下是我的错误!!!

 

后台报错:

feign.FeignException$MethodNotAllowed: [405] during [GET] to [http://USER-SERVER/findAllEntity] [UserInfoService#findAll(UserInfo)]: [{"timestamp":"2020-08-15T16:08:46.451+0000","status":405,"error":"Method Not Allowed","message":"Request method 'POST' not supported","path":"/findAllEntity"}]
 

 

这是因为feign会将get方式转换为post方式(而post方式默认是在参数前面加了注解@RequestBody的),以下是解决方式!!!(在不修改get post方式的前提下!)

@RequestBody:其实意思是前端传的是json数据!!!

get方式传参是直接在地址栏的查询字符串的方式! 而不是用RequestBody的方式。

 

以下是解决方式

1.bootstrap.yml中配置

2.加入依赖:

注意,用了此种方式后,如果存在post方式,那么@RequestBody注解就不能省略!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值