SpringCloud Feign 传参问题及传输Date类型参数的时差

1.多参数表单类型传输

    @PostMapping("/service/system/advertiser/save")
    Response<Boolean> saveAdvertiser(@RequestParam("username") String username,
                                     @RequestParam("nickname") String nickname,
                                     @RequestParam("type") Integer type,
                                     @RequestParam("password") String password);

注:这种传参方式@RequestParam注解及其value值必须要,而且其实现方法的参数名字必须和注解中的value值一样,否则就要在实现方法中也要加@RequestParam注解及其value值。

2.通过JSON传输

    @PostMapping("/service/system/advertiser/selectOne")
    Response<Advertiser> selectOne(@RequestBody Advertiser advertiser);
    @Override
    public Response<Advertiser> selectOne(@RequestBody Advertiser advertiser) {
        return new Response<Advertiser>().ok().data(advertiserService.selectOne(advertiser));
    }

注:这种传参方式必须要在其实现方法中也要打上@RequestBody注解,否则无法接收到参数。

3.Date类型参数的时差



这是我使用第一种方式传参时出现的问题,平台传的参数是上面的,但是服务接收到的参数是下面的,这是SpringCloud Feign传Date类型参数的时差导致的。

使用第二种方式将参数封装在对象中,通过JSON传参就不会出现时差。

如果真要用第一种方式的话,有两种解决方法:

         a.当发送时间类型时,直接用String发送

        b.Feign客户端实现FeignFormatterRegistrar接口自定义DateFormatRegister

    @Component
    public class DateFormatRegister implements FeignFormatterRegistrar{

        public DateFormatRegister(){
        }

        @Override
        public void registerFormatters(FormatterRegistry registry) {
        registry.addConverter(Date.class, String.class, new Date2StringConverter()); 
        }

        private class Date2StringConverter implements Converter<Date,String>{

            @Override
            public String convert(Date source) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return sdf.format(source);
            }

        }
    }

    provider增加相应的解析器

    @Configuration
    public class WebConfigBeans {
        @Autowired
        private RequestMappingHandlerAdapter handlerAdapter;

        /**
        * 增加字符串转日期的功能
        */
        @PostConstruct
        public void initEditableValidation() {
            ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) handlerAdapter
                        .getWebBindingInitializer();
            if (initializer.getConversionService() != null) {
                GenericConversionService genericConversionService = (GenericConversionService) initializer
                            .getConversionService();
                genericConversionService.addConverter(String.class, Date.class, new String2DateConverter());
            }
        }
    }

b方法转载自 https://blog.youkuaiyun.com/u014747616/article/details/77855224本人未实际操作过,供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值