zoukankan      html  css  js  c++  java
  • Feign之间调用的参数传递问题(@RequestBody 和@RequestParam)

    Feign调用接口时,都是需要进行参数传递的,一般可以分为两类

    1. 字符串参数传递,比如xml、json、string等
    2. 对象参数传递

    字符串参数传递(@RequestParam)

    @RequestParam注解用来接收字符串类型参数,有以下注意点

    1. 客户端@RequestParam注解的value属性必须指定值,不能为空,且要和服务端接口参数名保持一致
    2. 如果需要传递多个字符串参数,则使用多个@RequestParam注解与服务端接口参数保持一一对应即可

    服务端

    @ResponseBody
    @PostMapping(value = "check")
    public CheckAckVo check(String jsonParam) {
        FileCheckVo fileCheckVo = JacksonUtil.jsonToBean(jsonParam, FileCheckVo.class);
        
        return checkAck(taskId, OpStatusEnum.SUCCESS.getCode());
    }

    客户端

    @FeignClient(value = "act-engine-web", fallbackFactory = PlatformUserFeignServiceFallBack.class)
    public interface PlatformUserFeignService {
    
        @RequestMapping(value = "/engine/check", method = RequestMethod.POST)
        String check(@RequestParam(value = "jsonParam") String jsonParam);
    }

    对象参数传递(@RequestBody )

    @RequestBody注解用来接收字符串类型参数,有以下注意点

    1. @RequestBody 注解在服务端和客户端都需要使用
    2. 参数名和参数类型在服务端和客户端需要保持一致

    服务端

    @ResponseBody
    @PostMapping(value = "check")
    public CheckAckVo check(@RequestBody FileCheckVo fileCheckVo) {
    
        //使用对象参数传递,则不需要再使用jackson进行转化
        //FileCheckVo fileCheckVo = JacksonUtil.jsonToBean(jsonParam, FileCheckVo.class);
        
        return checkAck(taskId, OpStatusEnum.SUCCESS.getCode());
    }

    客户端

    @FeignClient(value = "act-engine-web", fallbackFactory = PlatformUserFeignServiceFallBack.class)
    public interface PlatformUserFeignService {
    
        @RequestMapping(value = "/engine/check", method = RequestMethod.POST)
        String check(@RequestBody FileCheckVo fileCheckVo);
    }

    思考

    1. @RequestBody 进行对象参数传递时,需要引入参数类型依赖(FileCheckVo),此时最好是将这个依赖放入公共依赖包中,否则会增加服务端和客户端的耦合度。
    2. 个人感觉@RequestBody 更多的用于系统间进行文件传递等(将文件读为byte数组,和其他属性组装成一个对象进行传递)
  • 相关阅读:
    Spring深入浅出(九),注解,@Autowired/@Resource,及其它(@Component/@Repository/@Service/@Controller)
    Spring深入浅出(八),自动装配,constructor
    使用node-webkit包装浏览器
    node-webkit 屏幕截图功能
    nodeJS 爬虫,通过Puppeteer实现滚动加载
    nodejs爬虫笔记(四)---利用nightmare解决加载更多问题
    一款开源免费的WPF图表控件ModernuiCharts
    使用各种 WPF Chart图表控件、插件的经历回顾与总结
    android 控件转bitmap
    一些关于 SAP Spartacus 组件和模块延迟加载的问题和解答
  • 原文地址:https://www.cnblogs.com/weixupeng/p/13673970.html
Copyright © 2011-2022 走看看