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.csdn.net/u014747616/article/details/77855224本人未實際操作過,供參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章