SpringCloud / venus-cloud-feign

venus-cloud-feign-对Spring Cloud Feign的增强
Apache License 2.0
165 stars 60 forks source link

fegin接口GET方法,使用@RequestBody 注解参数异常 #5

Open panjianping opened 5 years ago

panjianping commented 5 years ago
  1. spring-boot 版本为 2.0.8 ; spring-cloud 版本为F版SR2

  2. fegin接口定义

    @GetMapping("/api/comment/ids")
    ResponseVo<Integer> findCommentTmp(@RequestBody ArrayList<Long> ids);
  3. 实现类1:加@RequestBody

    @Override
    public ResponseVo<Integer> findCommentTmp(@RequestBody ArrayList<Long> ids) {
    log.info("ids:{}",ids);
    return null;
    }

    报错(没有集成venus-cloud-feign是正常的):

    org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public com.lx.core.model.ResponseVo<java.lang.Integer> com.lx.comment.api.CommentApiServiceImpl.findCommentTmp(java.util.ArrayList<java.lang.Long>)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:160)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:130)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:124)
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:131)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:891)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:981)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:873)
  4. 实现类2:不加@RequestBody

    @Override
    public ResponseVo<Integer> findCommentTmp(ArrayList<Long> ids) {
    log.info("ids:{}",ids);
    return null;
    }

    错误: ids 始终为空值

  5. 如果接口使用POST方法,参数使用@RequestBody,实现类参数加不加@RequestBody,都是正常的能获取ids值

SoftwareKing commented 5 years ago

@panjianping spring-cloud 版本为F版SR2,目前venus-cloud-feign升级,没有做适配

panjianping commented 5 years ago

@SoftwareKing 意思是当前 venus-cloud-feign-1.0.0 没有对 spring-cloud的F版FSR2 没有做适配是吧?

SoftwareKing commented 5 years ago

@panjianping 对

dxxyz commented 5 years ago

直接用@SpringQueryMap注解试试