企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
> 1. 实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。 > 2. 为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。只需要实现此接口,重写run方法即可,run方法中完成初始化操作。 1. 实现CommandLineRunner接口,复写run方法 2. 加@Configuration或者其它注解,让容器创建该对象,创建对象时会自动执行run方法 3. 如果有多个初始化类,按照需要可以使用@Order(value = 1)标识初始化顺序 > 例如利用FastJson进行复杂的格式转换,0代表男性,1代表女性,通常情况下,使用Spring的 > @ResponseBody或者 > @RequestBody或者 > @RestfulController > 就可以很好的帮我们完成json字符串到Controller属性的映射,或者返回给前台正确格式的JSON! > 但是,Date类型,默认显示为图中createDate的时间毫秒样式,也无法正确接收YYYY-MM-DD HH-mi-ss形式的参数 > 如:数据字典,1代表男,2代表女,需要在返回给前台时做一下翻译! 1. fastjson实现前后台数据转换 ~~~ @Configuration public class FastjsonConfig implements CommandLineRunner { # 继承CommandLineRunner,实现run方法,实现只加载一次 @Resource SysDictionaryMapper sysDictionaryMapper; private List<SysDictionary> dicts; @Bean public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures( SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue ); fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); ValueFilter valueFilter = new ValueFilter() { public Object process(Object object, String property, Object value) { if (null == value) { value = ""; } //数据字典的翻译 Map<String,Object> columnTranslateMap; for(SysDictionary sysDictionary : dicts){ if(sysDictionary.getDicClass().contains(object.getClass().getSimpleName()) && property.equals(sysDictionary.getDicProperty())){ //类型转换,都换成String类型,方便比较 String valueStr = value.toString(); //数据转换 if( valueStr.equals(sysDictionary.getDicValue()) ){ columnTranslateMap = new HashMap<>(); columnTranslateMap.put("code",sysDictionary.getDicValue());//翻译字段实际值 columnTranslateMap.put("text",sysDictionary.getDicName());//字面名称 value = columnTranslateMap; } } } return value; } }; fastJsonConfig.setSerializeFilters(valueFilter); converter.setFastJsonConfig(fastJsonConfig); //处理中文乱码问题 List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); converter.setSupportedMediaTypes(fastMediaTypes); return converter; } // 加载字典表 @Override public void run(String... strings) throws Exception { System.out.println("只在服务启动时加载一次!"); SysDictionaryExample sysDictionaryExample = new SysDictionaryExample(); dicts = sysDictionaryMapper.selectByExample(sysDictionaryExample); } } ~~~