1,dao层参数必须加 @Param
java没有保存行参的记录,java在运行的时候会把List queryAll(int offset,int limit);中的参数变成这样:queryAll(int arg0,int arg1),这样我们就没有办法去传递多个参数,需要在 dao 层使用 @Param 注解给方法参数命名,然后在 xml 文件的该 dao 层方法对应的 sql 语句中就可以正常使用 @Param 注解的参数名。 https://blog.csdn.net/baidu_26954625/article/details/90511656
2,
SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer);
第一种方法:
如果你的API为Restful 方式的可以在Client接口参数中加注解@PathVariable
@FeignClient(name = "PRODUCT") @Component public interface ProductClient { @PostMapping("/product/getMsgByGet/{a}") String getMsg(@PathVariable("a") String a); }
第二种方法:
不是Restful形式的API 在Client接口参数加注解@ReuqstParam
@FeignClient(name = "PRODUCT") @Component public interface ProductClient { @PostMapping("/product/getMsgByGet") String getMsg(@RequestParam String a); }
3,Feign 解决 Get 请求自动转化成 POST 的问题
明明Feign发送的是Get请求,到了提供者这边却变成了Post,因为Feign使用默认的连接工具实现类,所以里面发现只要你有body体对象,就会强制的把GET请求转换成POST请求。
所以解决办法是在调用者这边,更换Apache的HttpClient。使get请求变成post请求,覆盖项目默认的实现。从而达到目的。
1)加入Feign的配置项
feign:
httpclient:
enabled: true
2)加入这两个依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.9</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>10.2.3</version>
</dependency>
4,feign调用如果传递的参数为空,服务提供者这边参数需要加上required = false ,比如: