前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java工作中遇到的问题Method has too many Body parameters的处理办法SpringCloud Feign报错:Method has too many Body par

Java工作中遇到的问题Method has too many Body parameters的处理办法SpringCloud Feign报错:Method has too many Body par

作者头像
botkenni
发布2020-10-26 16:25:46
4K0
发布2020-10-26 16:25:46
举报
文章被收录于专栏:IT码农IT码农
代码语言:javascript
复制
查询相关问题
if (nicheContractIds.size() > 0) {
    String stringContractIds = nicheContractIds.stream().map(String::valueOf).collect(Collectors.joining(","));
    // 使用自定义的sql
    contractsQuery.addCustomWhere("id not in(" + stringContractIds +") ");//最终格式:id not in(12321323,2343242,53535)
}
代码语言:javascript
复制
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String createTime = dateFormat.format(nicheModel.getCreateTime());
// createTime需要转换成2020-09-02 12:00:00格式,new Date()格式不正确
contractsQuery.addGtWhere("createTime", createTime);
代码语言:javascript
复制
// 错误不支持
contractsQuery.addNotInWhere("id", nicheContractIds);
代码语言:javascript
复制
// 正确使用
Query query = Query.instance();
List<Object> ratios = new ArrayList<>();
ratios.add(HUNDRED);
ratios.add(ZERO);
query.addEqWhere("customerId", customerId);
query.addNotInWhere("ratio", ratios);
query.addEqWhere("isOpen", false);
query.addEqWhere("isDeleted", false);
query.addNotEqWhere("followStatus", FollowStatusConstant.CLOSE);
if (null != nicheId) {
    // 编辑时排除自己
    query.addNotEqWhere("id", nicheId);
}

Method has too many Body parameters的处理办法

SpringCloud Feign报错:Method has too many Body parameters

1、feign多参数问题

1.1GET方式

错误写法

@RequestMapping(value="/test", method=RequestMethod.GET) ​​​​​​​

Model test(final String name, final int age);

启动服务的时候,会报如下异常:​​​​​​​

Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract com.chhliu.springboot.restful.vo.User com.chhliu.springboot.restful.feignclient.UserFeignClient.findByUsername(java.lang.String,java.lang.String)

异常原因:当使用Feign时,如果发送的是get请求,那么需要在请求参数前加上@RequestParam注解修饰,Controller里面可以不加该注解修饰 ,@RequestParam可以修饰多个,@RequestParam是用来修饰参数,不能用来修饰整个对象。

注意:@RequestParam Content-Typeapplication/x-www-form-urlencoded 而这种是默认的

正确写法

@GetMapping("/getSchoolDetail")​​​​​​​

public ResultMap getSchoolDetail(@RequestParam("kSchoolId") LongkSchoolId,

@RequestParam("kSchoolYearId") Long kSchoolYearId);

1.1POST方式

错误写法

代码语言:javascript
复制
public int save(@RequestBody final User u, @RequestBody final School s);

feign中你可以有多个@RequestParam,但只能有不超过一个@RequestBody,@RequestBody用来修饰对象,但是既有@RequestBody也有@RequestParam,那么参数就要放在请求的url中,@RequestBody修饰的就要放在提交对象中

注意 用来处理@RequestBody Content-Typeapplication/jsonapplication/xml编码的内容

正确写法

代码语言:javascript
复制
public int save(@RequestBody final Person p,@RequestParam("userId") String userId,@RequestParam("userTel") String userTel);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Method has too many Body parameters的处理办法
  • SpringCloud Feign报错:Method has too many Body parameters
  • 1、feign多参数问题
    • 1.1GET方式
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档