注解:
@RequestParam:前端传值时要在URL后面拼接 参数名+参数值
用法:@RequestParam(value="nnn",required=false),Post和Get都可以使用
@RequestBody:从请求体中获取数据
用法:支持Post
@PathVariable:前端传值时,不需要参数名,直接在URL后面拼接参数值即可,url/typeId,用来获取url中的动态参数
用法:只支持Get
get和post请求中对于传递单个引用类型的参数,比如String,Integer....用@RequestParam(),括号中一定要有值(参数的别名)。调用方需要加注解,被调用方不需要加。当然加上也不会出错。被调用方的参数名和调用方的别名保持一致即可。
post请求中对于javaBean,map,list类型的参数的传递,用@RequestBody,调用方不需要加注解,被调用方加注解即可。 注:get请求中使用@RequestBody会出错,同时也不能传递javaBean,map,list类型的参数。
参考文章:http://www.javashuo.com/article/p-parfdzuq-mg.html
(1)无参请求
Post和Get没有区别,均只需要修改RequestMethod请求类型就可以
/**
* 调用过程代码
*/
public Result<?> queryParticipantsList(){
System.out.println(iSysBaseAPI.feignTestDemo());
return new Result<>().ok(null);
}
/**
* 在Feign的Api接口和实现类的代码如下
* @Description Feign调用测试 get和post无参调用
*/
@RequestMapping(value = "/sys/api/feignTestDemo",method = RequestMethod.GET)
public String feignTestDemo();
@RequestMapping(value = "/feignTestDemo",method = RequestMethod.GET)
public String feignTestDemo(){
return "Get调用测试";
}
@RequestMapping(value = "/sys/api/feignTestDemo",method = RequestMethod.POST)
public String feignTestDemo();
@RequestMapping(value = "/feignTestDemo",method = RequestMethod.POST)
public String feignTestDemo(){
return "Post无参调用测试";
}
@RequestMapping(value = "/sys/api/feignTestDemo",method = RequestMethod.POST)
public List feignTestDemo();
@RequestMapping(value = "/feignTestDemo",method = RequestMethod.POST)
public List feignTestDemo(){
List list=new ArrayList<>();
SysUser sysUser=new SysUser();
sysUser.setId("110");
sysUser.setUsername("Post无参调用测试");
list.add(sysUser);
return list;
}
@RequestMapping(value = "/sys/api/feignTestDemo",method = RequestMethod.GET)
public List feignTestDemo();
@RequestMapping(value = "/feignTestDemo",method = RequestMethod.GET)
public List feignTestDemo(){
List list=new ArrayList<>();
SysUser sysUser=new SysUser();
sysUser.setId("110");
sysUser.setUsername("Post无参调用测试");
list.add(sysUser);
return list;
}
(2)有参请求
get请求
第一种Get请求,没有使用任何注解,结果会提示错误
public Result<?> queryParticipantsList(){
String title="String参数,Get请求,没有使用注解";
System.out.println(iSysBaseAPI.feignTestDemo(title));
return new Result<>().ok(null);
}
@RequestMapping(value = "/sys/api/feignTestDemo",method = RequestMethod.GET)
public String feignTestDemo(String title);
@RequestMapping(value = "/feignTestDemo",method = RequestMethod.GET)
public String feignTestDemo(String title){
return title;
}
错误信息如下:
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
第二种情况 使用@RequestParam("title"),正常没有任何问题
public Result<?> queryParticipantsList(){
String title="String参数,Get请求,使用@RequestParam(\"title\")";
System.out.println(iSysBaseAPI.feignTestDemo(title));
return new Result<>().ok(null);
}
@RequestMapping(value = "/sys/api/feignTestDemo",method = RequestMethod.GET)
public String feignTestDemo(@RequestParam("title") String title);
@RequestMapping(value = "/feignTestDemo",method = RequestMethod.GET)
public String feignTestDemo(@RequestParam("title")String title){
return title;
}
第三种情况:当传递的参数是List和List的时候,当时List正常调用,没有任何问题
public Result<?> queryParticipantsList(){
String title="String参数,Post请求,使用@RequestParam(\"title\")";
List titles=new ArrayList<>();
titles.add(title);
System.out.println(iSysBaseAPI.feignTestDemo(titles));
return new Result<>().ok(null);
}
@RequestMapping(value = "/sys/api/feignTestDemo",method = RequestMethod.GET)
public List feignTestDemo(@RequestParam(name = "titles") List titles);
@RequestMapping(value = "/feignTestDemo",method = RequestMethod.GET)
public List feignTestDemo(@RequestParam(name = "titles")List titles){
return titles;
}
当传递的是List<实体的时候,会出现错误>,错误信息如下
public Result<?> queryParticipantsList(){
SysUser sysUser=new SysUser();
sysUser.setUsername("get请求,传送List参数");
sysUser.setId("110");
ArrayList titles=new ArrayList<>();
titles.add(sysUser);
System.out.println(iSysBaseAPI.feignTestDemo(titles));
return new Result<>().ok(null);
}
@RequestMapping(value = "/sys/api/feignTestDemo",method = RequestMethod.GET)
public List feignTestDemo(@RequestParam(name = "titles") ArrayList titles);
2021-12-16 15:56:54.372 [http-nio-7001-exec-7] ERROR o.jeecg.common.exception.JeecgBootExceptionHandler:69 - Failed to convert value of type 'java.lang.String' to required type 'java.util.ArrayList'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.util.ArrayList': no matching editors or conversion strategy found
@RequestMapping(value = "/feignTestDemo",method = RequestMethod.GET)
public List feignTestDemo(@RequestParam(name = "titles")ArrayList titles){
return titles;
}
第四种情况 使用@PathVariable("title"),错误
错误原因:无法在url中拼接参数,后期需要询问讨论一下。
public Result<?> queryParticipantsList(){
String title="String参数,Get请求,使用@PathVariable(\"title\")";
System.out.println(iSysBaseAPI.feignTestDemo(title));
return new Result<>().ok(null);
}
@RequestMapping(value = "/sys/api/feignTestDemo/{title)}",method = RequestMethod.GET)
public String feignTestDemo(@PathVariable(value = "title") String title);
@RequestMapping(value = "/feignTestDemo/{title)}",method = RequestMethod.GET)
public String feignTestDemo(@PathVariable(value = "title") String title){
return title;
}
错误信息如下:
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
post请求
第一种,单参数,使用@RequestParam传递,没问题
public Result<?> queryParticipantsList(){
String title="String参数,Post请求,使用@RequestParam(\"title\")";
System.out.println(iSysBaseAPI.feignTestDemo(title));
return new Result<>().ok(null);
}
@RequestMapping(value = "/sys/api/feignTestDemo",method = RequestMethod.POST)
public String feignTestDemo(@RequestParam(name = "title") String title);
@RequestMapping(value = "/feignTestDemo",method = RequestMethod.POST)
public String feignTestDemo(@RequestParam(name = "title") String title){
return title;
}
第二种传递实体的时候,使用@RequestParam和@RequestBody两种方式进行测试
采用@RequestParam注解的,失败
public Result<?> queryParticipantsList(){
SysUser sysUser=new SysUser();
sysUser.setUsername("Post请求,传送List参数");
sysUser.setId("110");
ArrayList titles=new ArrayList<>();
titles.add(sysUser);
System.out.println(iSysBaseAPI.feignTestDemo(titles));
return new Result<>().ok(null);
}
@RequestMapping(value = "/sys/api/feignTestDemo",method = RequestMethod.POST)
public List feignTestDemo(@RequestParam(name = "titles")ArrayList titles);
@RequestMapping(value = "/feignTestDemo",method = RequestMethod.POST)
public List feignTestDemo(@RequestParam(name = "titles")ArrayList titles){
return titles;
}
错误信息如下:
2021-12-16 16:11:58.725 [http-nio-7001-exec-7] ERROR o.jeecg.common.exception.JeecgBootExceptionHandler:69 - Failed to convert value of type 'java.lang.String' to required type 'java.util.ArrayList'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.util.ArrayList': no matching editors or conversion strategy found
采用@RequestBody注解的,成功
public Result<?> queryParticipantsList(){
SysUser sysUser=new SysUser();
sysUser.setUsername("Post请求,传送List参数");
sysUser.setId("110");
ArrayList titles=new ArrayList<>();
titles.add(sysUser);
System.out.println(iSysBaseAPI.feignTestDemo(titles));
return new Result<>().ok(null);
}
@RequestMapping(value = "/sys/api/feignTestDemo",method = RequestMethod.POST)
public List feignTestDemo(@RequestBody ArrayList titles);
@RequestMapping(value = "/feignTestDemo",method = RequestMethod.POST)
public List feignTestDemo(@RequestBody ArrayList titles){
return titles;
}
第三种传递多种参数,使用@RequestParam和@RequestBody进行混合使用,没问题
public Result<?> queryParticipantsList(){
SysUser sysUser=new SysUser();
sysUser.setUsername("Post请求,传送List参数");
sysUser.setId("110");
ArrayList titles=new ArrayList<>();
titles.add(sysUser);
String name="Post,多参数测试";
System.out.println(iSysBaseAPI.feignTestDemo(titles,name));
return new Result<>().ok(null);
}
@RequestMapping(value = "/sys/api/feignTestDemo",method = RequestMethod.POST)
public List feignTestDemo(@RequestBody ArrayList titles,@RequestParam(name = "name")String name);
@RequestMapping(value = "/feignTestDemo",method = RequestMethod.POST)
public List feignTestDemo(@RequestBody ArrayList titles,@RequestParam(name = "name") String name){
return titles;
}