SpringBoot和SpringCloud feign 接口请求参数类型

Spring中和Feign中调用带有文件参数的接口的具体实现(附带feign-form中添加自定义Writer的实现) 1. Spring 中调用文件接口 导入jar <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.9</version> <scope>test&l 阅读详情

         SpringBoot和SpringCloud feign 接口请求参数类型

一、介绍

在日常开发过程中难免都会使用到接口进行参数传递,大部分情况只是单个或多个参数进行传递,有一些特殊情况可能需要其他类型参数比如数组,对象,对象集合等。

二、参数类型

1、基本参数:

 a、HttpServletRequest request:接受参数(不推荐)

代码介绍:

// A服务接口
@PostMapping(value="/getUserDto",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public String getUserDto(HttpServletRequest request){
    String token = request.getParameter("token");
    // 其他业务逻辑
}
// B服务 feign接口
@PostMapping(value="/baseinfo/getUserDto")
String getUserDto(@RequestParam("token") String token);

// B服务接口
@PostMapping(value="/getUserDto",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public List<UserDto> getUserDto(HttpServletRequest request){
	String token = request.getParameter("token");
	String value = baseInfoApi.getUserDto(token);
	return value;
}

b、@RequestParam:接受参数(推荐)

代码介绍

// A服务接口
@PostMapping(value="/getUserDto1",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public UserDto getUserDto1(@RequestParam("token") String token,
                           @RequestParam("money") Integer money){
		log.info("====>>>> token:{},money{}",token,money);
		UserDto u1 = new UserDto();
		u1.setAge(11);
		u1.setName("yyy");
		return u1;
	}
// B服务 feign接口
@PostMapping(value="/baseinfo/getUserDto1")
UserDto getUserDto1(@RequestParam("token") String token,
                    @RequestParam("money") Integer money);

// B服务接口
@PostMapping(value="/getUserDto1",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public UserDto getUserDto1(@RequestParam("token") String token,
                           @RequestParam("money") Integer money){
		log.info("====>>>> token:{},money{}",token,money);
		UserDto u1 = baseInfoApi.getUserDto1(token,money);
		return u1;
}

总结:@RequestParam后面还有其他一些属性,比如该参数是否必须存在还有就是可以设置一个默认的值当前台接口没有传递该参数时。

@RequestParam(value="", required=true, defaultValue="")

博客推荐:https://blog.youkuaiyun.com/siwuxie095/article/details/79407123

 

c、@RequestParam Map<String,Object> map :当参数过多时可以这样编写

代码介绍:

// A服务接口
@PostMapping(value="/getUserDto5",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public UserDto getUserDto5(@RequestParam Map<String,Object> map){	
    // 打印map中的key和value
    for (Map.Entry<String, Object> entry : map.entrySet()) {  
	    System.out.println("Key = " + entry.getKey() + ", Value = " +entry.getValue());  
	}  
	UserDto u1 = new UserDto();
	u1.setAge(11);
	u1.setName("yyy");
	return u1;
}

// B服务 feign接口
@PostMapping(value="/baseinfo/getUserDto5")
UserDto getUserDto5(@RequestBody Map<String,Object> map);

// B服务接口
@PostMapping(value="/getUserDto5",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public UserDto getUserDto5(@RequestParam Map<String,Object> map){
    for (Map.Entry<String, Object> entry : map.entrySet()) {  
        System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());  
    }  
    UserDto u1 = new UserDto();
    u1.setAge(11);
    u1.setName("yyy");
    return u1;
}

2、对象参数(当请求参数过多时,使用基本参数接受代码繁琐)

a、@RequestBody:接受对象参数

代码介绍:

// A服务接口
@PostMapping(value="/getUserDto2",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	public UserDto getUserDto2(@RequestBody UserDto userDto){
		log.info("====>>>> userDto:{}",userDto);
		UserDto u1 = new UserDto();
		u1.setAge(11);
		u1.setName("yyy");
		return u1;
}

// B服务feign接口
@PostMapping(value="/baseinfo/getUserDto2")
UserDto getUserDto2(@RequestBody UserDto userDto);

// B服务接口
@PostMapping(value="/getUserDto2",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	public UserDto getUserDto2(@RequestBody UserDto userDto){
		log.info("====>>>> userDto:{}",userDto);
		UserDto u1 = baseInfoApi.getUserDto2(userDto);
		return u1;
	}

b、@ModelAttribute:注解类型将参数绑定到Model对象(不常用)

总结:@RequestParam、@RequestBody和@ModelAttribute区别参见以下博客:

https://www.cnblogs.com/zeroingToOne/p/8992746.html

 

2.1、对象中嵌套其他对象时

@RequestBody:接受对象参数

前台传参格式:

后台接口接受参数还是和上面一样

 

3、对象集合(请求参数为多个对象)

@RequestBody:接受对象参数

代码介绍:

// A服务接口
@PostMapping(value="/getUserDto3",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	public UserDto getUserDto3(@RequestBody List<UserDto> userList){
		log.info("====>>>> userList:{}",userList);
		UserDto u1 = baseInfoApi.getUserDto3(userList);
		return u1;
	}

// B服务feign接口
@PostMapping(value="/baseinfo/getUserDto3")
UserDto getUserDto3(@RequestBody List<UserDto> userDto);

// B服务接口
@PostMapping(value="/getUserDto3",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	public UserDto getUserDto3(@RequestBody List<UserDto> userList){
		log.info("====>>>> userList:{}",userList);
		UserDto u1 = baseInfoApi.getUserDto3(userList);
		return u1;
	}

前台传参格式:

注意事项:

该方法仅支持POST的方式,会使用到json2.js这个类库,注意设置contentType:"application/json"这个属性,否则会报415未知的类型异常

4、数组集合

@RequestBody:接受数组对象集合

代码介绍:

// A服务接口
@PostMapping(value="/getUserDto4",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	public UserDto getUserDto4(@RequestBody String[] names){
		for(String s:names){
			System.out.println("====>>>>"+s);
		}
		UserDto u1 = new UserDto();
		u1.setAge(11);
		u1.setName("yyy");
		return u1;
	}
// B服务feign 接口

@PostMapping(value="/baseinfo/getUserDto4")
UserDto getUserDto4(@RequestBody String[] names);

// B服务接口
@PostMapping(value="/getUserDto4",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	public UserDto getUserDto4(@RequestBody String[] names){
		for(String s:names){
			System.out.println("====>>>>"+s);
		}
		UserDto u1 = baseInfoApi.getUserDto4(names);
		return u1;
}

前台传参格式:

注意事项:

注意contentType:"application/json",否则同样的415错误。

5、其他类型传参:(URL地址传参、session、cookie)

参见博客:https://blog.youkuaiyun.com/z69183787/article/details/41653843

记录springboot+springcloud实际开发中需要注意的一些细节 用springboot+springcloud开发也有一年多了,记录一下心得,和一些需要注意的地方。 1.feign调用时,方法参数的@RequestParam里面必须要有value值 比如,你这个样子写就是不行滴: @FeignClient("test-service") //这个地方是你要调用的服务的应用名(spring.application.name配置) public interface... 阅读详情

相关推荐

26、商城系统(八):nexus配置,拆分springcloud为多个springboot,并且实现多个springboot通过feign调用接口

nexus配置,拆分springcloud为多个springboot,并且实现多个springboot通过feign调用接口

鹏哥哥Aaa 1127

Feign之复杂参数传递

前言 由于之前一直被问Feign如何传递复杂参数呀,如:1、小明提供的POST接口,接收的参数不是@RequstBody的,我要一个一个写@RequestParam,好繁琐啊;2、小李提供的GET接口参数太多,又不能封装对象传给他,每一个参数都要写@RequestParam,好蛋疼啊。其实这些问题都不是问题,问题是很多同学没有去看官方文档,没有去看源码。其实SpringQueryMap(Sprin...

仰望星空 脚踏实地 2890

AI医疗影像诊断工具2025 完整教程

本教程所述工具均为辅助诊断设备,不可替代执业医师判断。部署使用需遵守当地医疗器械管理法规。推荐开源框架组合:代码太多打包上传网盘了 自行下载。2025年的AI医疗影像诊断工具将以。

m0_60084632的博客 2027

SpringBoot项目整合OpenFeign、实现动态IP+URL请求、自定义(编码器\解码器)

*** @Description:自定义Feign跨服务请求,编译器try {//获取请求头详情 Map < String , Collection < String > > headers = template . headers();//查看请求方式 Collection < String > contentType = headers . get("Content-Type");

qq_39648078的博客 4008

【具身算法】VLA算法-Diffusion Policy

《扩散策略:多模态机器人控制的新方法》摘要 本文提出了一种基于扩散模型的机器人控制策略(DiffusionPolicy),用于解决视觉运动控制中的多模态行为、高维动作空间和训练稳定性问题。该方法利用去噪扩散概率模型(DDPM)生成动作序列,通过迭代优化处理复杂动作分布,显著提升了性能。实验表明,在15项机器人操作任务中,扩散策略平均性能提升46.9%,有效解决了传统显式/隐式策略的局限性。其核心优势在于:1)优雅建模多模态动作分布;2)适应高维动作空间;3)训练过程稳定。未来工作将探索与强化学习的结合及计算

puzhinan7781的博客 1389

Augustus手动安装教程

本文记载了如何结合conda手动安装Augustus

m0_65437087的博客 1255

springboot restful 请求参数传递url设置方式

spring工程restful风格 http请求url地址参数传递详解

focuscoder的博客 1563

使用C# HslCommunication库实现三菱PLC通信(含完整代码示例)

在工业自动化开发中,上位机与PLC的通信是关键环节。HslCommunication库是一个开源的.NET工业通信库,支持三菱、西门子、欧姆龙等多个品牌PLC的通信协议。本文将演示如何通过库实现C#程序与三菱PLC的通信,并提供完整的代码示例。

StevenChen的博客 2287

调用post请求方式的feign接口怎么传递多个参数,包含对象和字符串

feign的post请求接口传递多个参数

沐雨橙风ιε的博客 4670

android13删除录屏权限提示框-去除录屏提示

在Android 13中,当应用请求屏幕录制权限时,系统会弹出一个权限提示框,要求用户明确授权。这个提示框是为了增强用户隐私保护,让用户知道有应用尝试录制屏幕。但是,在某些情况下,开发者可能希望避免显示这个提示框,以提供更流畅的用户体验。本文将介绍如何在Android 13中删除录屏权限提示框。

zhutoubenben的专栏 1880

六种光耦综合对比——《器件手册--光耦》

可控硅输出光耦(SCR Optocoupler)是一种特殊的光电耦合器,由红外发光二极管(LED)和双向可控硅(SCR)组成,用于实现输入和输出之间的电气隔离和信号传输。逻辑输出光耦是一种高效、可靠的数字信号隔离和电平转换器件,通过电气隔离和逻辑电平输出,确保了系统的安全性和信号的稳定性。固态继电器(可控硅输出,SSR)是一种无触点电子开关设备,利用可控硅(SCR或Triac)作为主要开关元件,通过光耦合器实现输入和输出之间的电气隔离。光耦作为一种成熟的电气隔离器件,在电子电路设计中具有重要的地位。

XU157303764的博客 1722

解决SpringBoot+SpringCloud中feign调用服务传递参数为MultipartFile的问题

文章目录前言一、前期说明二、使用步骤1.引入maven依赖2.新建feign的配置类2.feign客户端3.被调用的服务的Controller4.第三方服务远程调用主服务传递MultiPartFile三、参考博客 前言 本文解决了SpringBoot+SpringCloud在引用feign远程调用服务时传递的参数类型为MultipartFile的问题。 一、前期说明 feign服务之间的调用,传参默认的格式为:ContentType=application/x-www-form-urlencoded。

weixin_44410358的博客 1万+

合肥工业大学操作系统实验9

依据操作系统课程所介绍的页面置换算法与动态内存分配的原理,本实验的目的是掌握OPT、FIFO、LRU、LFU、Clock等页面置换算法;掌握可用空间表及分配方法;掌握边界标识法以及伙伴系统的内存分配方法和回收方法。从而深入理解操作系统的内存管理。从而加深对教材上页面置换算法与动态内存分配的理解。

Martin-share的博客 1094

声明式服务调用——SpringCloud 之Feign

通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,封装了。只需要定义一个接口,并且通过注解的形式定义好请求模板,就可以项使用本地接口一样,使用。,然后才能发起请求。获得响应体后,还需解析等操作,十分繁琐。,还是使用Http工具包 Apache 的。的话,无论是使用 JDK 自带的。请求调用的轻量级框架,可以以。2、为什么使用feign。框架,那么调用服务需要走。, 都需要自行配置请求。1、feign是什么。

诗人密语 1009

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

feign调用接口参数可以为null吗_《SpringCloud微服务之Feign组件》

项目版本: spring cloud版本为Greenwich.SR3 spring-boot版本为2.1.9.RELEASE什么是feigin?Feign:用于远程调用,让服务之间的调用变得更加简单类似于控制层的service,Fegin的底层使用了rabbon作为负载均衡的客户端它的优点是什么?1.feign采用的是基于接口注解2.feign整合了ribbon,具有负载均衡的能力3.整合了Hys...

weixin_35948624的博客 457

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

springboot单独使用feign简化接口调用

与HttpClient和RestTemplate相比,使用springcloud的feign调用远程接口更为简便,可以通过配置的方式快速书写接口调用的代码。但是有时我们并不像使用springcloud,而只是想在springboot中使用feign,我在网上搜了很多springboot单独集成feign,但都不能用,在通过学习、开发后简单整理了一个教程。详细介绍如何在springboot中单独集成feign以简便的方式调用远程接口。

岳豪的博客 5197

Feign脱离 springcloud 在springboot项目中独立使用小结

场景:springboot项目中,涉及到访问其他模块的开放接口(类似于访问第三方接口)的情况。 第一时间反应就是使用 httpclient 进行请求,随后又了解到RestTemplate,feign。 HttpClient 是apache 的开源 RestTemplate 是Spring的封装 Feign 是RestTemplate的进一步分装 使用过springcloud的应该都...

K1215400017的博客 3767

【微服务】SpringCloud之Feign远程调用

使用Feign远程调用代替RestTemplate远程调用。类型作用说明修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象请求参数编码将请求参数编码,便于通过http请求发送支持的注解格式默认是SpringMVC的注解失败重试机制请求失败的重试机制,默认是没有,不过会使用Ribbon的重试。

浩泽学编程的博客 7219

springcloud之Feign、ribbon设置超时时间和重试机制的总结

一、 Feign设置超时时间 使用Feign调用接口分两层,ribbon的调用和hystrix的调用,所以ribbon的超时时间和Hystrix的超时时间的结合就是Feign的超时时间 #hystrix的超时时间 hystrix: command: default: execution: timeout: ...

east123321的博客 8万+

SpringCloud Feign Get请求传对象参数

前置说明,有A、B两个服务,A服务调用B服务,B服务接口是Get类型,接受参数对象 feign get请求传对象参数分两种情况 1.版本在2.1之前,如我springboot是2.0.6.RELEASE,springcloud是Finchley.SR2版本,则A服务使用Map map替代对象传给B服务 //A-service @ApiOperation(value = “查询xx”, httpMethod = “GET”) @GetMapping("/maps") public ReturnEntity

m0_67391377的博客 2416

SpringCloud声明式服务调用Feign

金三银四到了,送上一个小福利!《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!金三银四到了,送上一个小福利![外链图片转存中…(img-oox2ZknS-1714761027946)][外链图片转存中…(img-MlBlzmIg-1714761027947)][外链图片转存中…(img-HeZ2gmV5-1714761027947)]《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

2401_84153270的博客 1126

SpringCloud Feign 服务之间的请求

对Spring Cloud Ribbon和Spring Cloud Hystrix在实践过程中,这两个框架的使用几乎是同时出现的,Spring Cloud Feign就是一个更高层次的封装来整合这两个基础工具以简化开发。它基于Netflix Feign实现,除了提供这两者的强大功能之外,它还提供了一种声明式的Web服务客户端定义的方式。Spring Cloud Feign在RestTemplate的封装基础上做了进一步封装,由它来帮助定义和实现依赖服务接口的定义,在Spring Cloud Feign的实现

180

SpringBoot+SpringCloud —— 使用Feign消费服务

转自:https://www.cnblogs.com/yimixiong/p/7927991.html 转:SpringBoot+SpringCloud —— 使用Feign消费服务 Feign简介 Spring Cloud Feign是基于Netflix Feign实现,整合了Spring Cloud Riggon与Spring Cloud Hystrix,出了提供这两者的强大功能外,他还...

ww_ndsc_ww的专栏 499

feign调用https接口_SpringCloud系列——Feign 服务调用

SpringCloud系列——Feign 服务调用发布时间:2018-12-18 11:16,浏览次数:659, 标签:SpringCloudFeign前言前面我们已经实现了服务的注册与发现(请戳:SpringCloud系列——Eureka 服务注册与发现),并且在注册中心注册了一个服务myspringboot,本文记录多个服务之间使用Feign调用。Feign是一个声明性web服务客户端。它使编...

weixin_31417633的博客 1350

SpringCloud Feign请求Oauth2 /oauth/token

请求参数: MultiValueMap<String, String> map = new LinkedMultiValueMap<>(); map.add("username", Optional.ofNullable(username).orElse("test1")); map.add("password", Optional.ofNullable(passwor...

qq_18453581的博客 1631
上一篇: java将对象或对象集合序列化成string
下一篇: Feign接口方法返回值设置
CoderYin
博客等级 码龄9年 36粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值