加注释的方法,就是我后添加进去的。encode 方法的最后一行稍微修改了一下,引用了我加的方法,其他都是直接借鉴过来的(本来我想更偷懒,直接继承一下子,但是它用了私有的内部类导致我只能全部复制粘贴了)。
解决方案不用引入其他的 Feign 依赖,保证有下面这个就行(看网上其他方法还要引入特定依赖,要对应版本号,挺麻烦的)
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>编写上面那样的类,你可以直接复制过去改个包名就行,如果还需要除了 Date 以外的格式化,请看注释和文章分析。其中我对日期的格式化,直接使用了 @DateTimeFormat 提供的模式,和 Spring 保持了一致。
编写一个 Feign 配置类,将刚自定义的编码器注册进去。细节我就不多说了:
package com.example.billmanagerfront.config; import com.example.billmanagerfront.config.encoder.PowerfulQueryMapEncoder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import feign.Feign; import feign.Retryer; @Configuration public class FeignConfig { @Bean public Feign.Builder feignBuilder() { return Feign.builder() .queryMapEncoder(new PowerfulQueryMapEncoder()) .retryer(Retryer.NEVER_RETRY); } }Feign 代理接口中声明使用这个配置类,细节不谈
package com.example.billmanagerfront.client; import java.util.List; import com.example.billmanagerfront.config.FeignConfig; import com.example.billmanagerfront.pojo.Bill; import com.example.billmanagerfront.pojo.BillType; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @FeignClient(name = "BILL-MANAGER", path = "bill", configuration = FeignConfig.class) public interface BillClient { @GetMapping("list") List<Bill> list(@SpringQueryMap(true) Bill b); @GetMapping("type") List<BillType> type(); @DeleteMapping("delete/{id}") public String delete(@PathVariable("id") Long id); }尊重原创,转载请标明出处。
应该就这些了。