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

xiaoxiao2021-02-28  47

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本人未实际操作过,供参考

转载请注明原文地址: https://www.6miu.com/read-2624321.html

最新回复(0)