SpringCloud|SpringCloud Feign多参数传递及需要注意的问题
目录
- Feign多参数传递及注意的问题
- 在服务提供者cloud-shop-userservice中新增几个方法
- 修改feign的UserService,新增对应的方法
- 在feign的controller中调用方法
- 重启修改过的服务,查看服务注册是否正常
- 使用工具调用这几个方法进行测试
- Feign如何接收多个参数
- 1.API
- 2.Feign
- 3.controller
Feign多参数传递及注意的问题 这边沿用前面的Eureka,Feign,Service
在服务提供者cloud-shop-userservice中新增几个方法
/*** 保存用户* 2018年1月18日*/ @PostMapping("/user") public String aveUser(@RequestBody User user) {logger.info("保存用户 :" +user.toString()); return "Success"; } /*** 根据用户名和密码查询用户* 2018年1月18日*/ @GetMapping("/findUser") public User findUserByNameAndPassword(String name ,String password) {logger.info("name :"+name +"---password :" +password); User user= new User(); user.setName(name); user.setPassword(password); return user; }
修改feign的UserService,新增对应的方法
package cn.sh.daniel.service; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import cn.sh.daniel.entity.User; @FeignClient(value = "https://www.it610.com/article/cloud-shop-userservice")public interface UserService { @GetMapping("/user/{id}") public User findUserById(@PathVariable("id")Long id); @PostMapping("/user/user") public String aveUser(@RequestBody User user) ; @GetMapping("/user/findUser") public User findUserByNameAndPassword(String name ,String password); }
在feign的controller中调用方法
/*** 保存用户* 2018年1月18日*/ @PostMapping("/user") public String aveUser(@RequestBody User user) {return userService.aveUser(user); } /*** 根据用户名和密码查询用户* 2018年1月18日*/ @GetMapping("/findUser") public User findUserByNameAndPassword(String name ,String password) {return userService.findUserByNameAndPassword(name, password); }
重启修改过的服务,查看服务注册是否正常
在启动过程中可以发现Feign服务启动报错:
【SpringCloud|SpringCloud Feign多参数传递及需要注意的问题】
文章图片
文章图片
为什么会报错呢?
这个方法有两个参数,而Feign去映射的时候它不会去自动给你区分那个参数是哪个,会直接给你报错
解决方法:添加注解,自己去指定要映射的属性
文章图片
重新启动Feign服务:
文章图片
启动成功!!!!
使用工具调用这几个方法进行测试
文章图片
文章图片
文章图片
成功调用两个方法!!!!
Feign如何接收多个参数 feigin多个参数POST情况下
method(String str1,String str2,String str3); method2(String str1,@RequestParam Map map,String str3);
1.API
package com.hwasee.hsc.api.redis; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import java.util.Map; /** * @author limaojing * @date 2020-07-28 */public interface RedisMapAPI {//===============================Map===============================@PostMapping("/redis/map/get")String getMap(@RequestParam(value = "https://www.it610.com/article/key") String key, @RequestParam(value = "https://www.it610.com/article/item") String item); @PostMapping("/redis/map/getAll")Map
2.Feign
package com.hwasee.hsc.feign.redis; import com.hwasee.hsc.api.redis.RedisMapAPI; import com.hwasee.hsc.constants.ServiceConstants; import org.springframework.cloud.openfeign.FeignClient; /** * @author limaopeng * @date 2020-11-25 */@FeignClient(name = ServiceConstants.Services.SERVICE_REDIS)public interface RedisMapFeign extends RedisMapAPI {}
3.controller
如果实现了API就不用添加,没有实现就要添加
package com.hwasee.hsc.redis.controller; import com.hwasee.hsc.redis.util.RedisUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Map; import java.util.Set; /** * @author limaojing * @date 2020-07-28 */@RestController@RequestMapping("/redis")public class RedisController {@Autowiredprivate RedisUtil redisUtil; @Autowiredprivate RedisUtil.redisMap redisMap; @Autowiredprivate RedisUtil.redisString redisString; @Autowiredprivate RedisUtil.redisSet redisSet; @Autowiredprivate RedisUtil.redisList redisList; //===============================Common===============================@PostMapping("/changeDatabase")public void changeDatabase(Integer index){redisUtil.changeDatabase(index); }/*** 指定缓存失效时间** @param key键* @param time 时间(秒)* @return*/@PostMapping("/expire")public Boolean expire(String key, Long time) {return redisUtil.expire(key, time); }/*** 根据key获取过期时间** @param key 键,不能为空* @return 时间秒,返回0代表永久有效*/@PostMapping("/getExpire")public Long getExpire(String key) {return redisUtil.getExpire(key); }/*** 判断key是否存在** @param key 键* @return 存在返回true,不存在返回false*/@PostMapping("/hasKey")public Boolean hasKey(String key) {return redisUtil.hasKey(key); }/*** 删除缓存** @param keys 可以传一个值,或多个值*/@SuppressWarnings("unchecked")@PostMapping("/del")public void del(@RequestParam String[] keys) {redisUtil.del(keys); }//===============================String===============================/*** 获取缓存** @param key 键* @return 值*/@PostMapping("/string/get")public String getString(String key) {return redisString.get(key).toString(); }/*** 缓存存入** @param key键* @param value 值* @return 操作成功返回true,失败返回false*/@PostMapping("/string/set")public Boolean setString(String key, String value) {return redisString.set(key, value); }/*** 普通缓存放入并设置时间** @param key键* @param value 值* @param time时间(秒) time要大于0 如果time小于等于0 将设置无限期* @return 操作成功返回true,失败返回false*/@PostMapping("/string/setValueAndTime")public Boolean setValueAndTime(String key, String value, Long time) {return redisString.set(key, value, time); }/*** 递增** @param key键* @param delta 要增加的值* @return*/@PostMapping("/string/incr")public Long incrString(String key, Long delta) {return redisString.incr(key, delta); }/*** 递减** @param key键* @param delta 要减小的值* @return*/@PostMapping("/string/decr")public Long decrString(String key, Long delta) {return redisString.decr(key, delta); }//===============================Map===============================/*** 取得对应键值** @param key键* @param item 项* @return 值*/@PostMapping("/map/get")public String getMap(String key, String item) {return redisMap.get(key, item); }/*** 获取hashKey对应的所有键值** @param key 键* @return map形式返回键值对*/@PostMapping("/map/getAll")public Map
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- mysql分组后合并显示一个字段的多条数据方式
- NextRPC : RPC多段返回的创新和探索
- FastAPI|FastAPI学习-7.POST请求body-多个参数
- jmeter|使用Robot Framework实现多平台自动化测试
- feign参数过多导致调用失败的解决方案
- Java并行流Stream多线程查询_list.stream().parallel()|Java并行流Stream多线程查询_list.stream().parallel() 并行流
- Java中的运算符你知道多少
- 微信多开WechatTweak Mac(微信多开、免认证工具)
- 机器学习基础|多标签学习之白话版
- Opencv|Opencv报错Assertion failed (size.width>0 && size.height>0) in imshow【多个解决方案】