Ein neues Projekt wurde kürzlich gestartet und im Projekt wird ein Datenwörterbuch verwendet. Wenn die Listenabfragedaten zurückgegeben werden, muss der Code manuell in einen Namen umgewandelt und an der Rezeption angezeigt werden. Der Projektmanager sagte, dass eine einheitliche Funktion gekapselt werden kann, um zu verhindern, dass Programmierer ihren eigenen, verwirrenden Code und inkonsistente Stile schreiben.
Basierend auf der Microservice-Architektur wird das Datenwörterbuch über den Dienst abgerufen.
Verwenden Sie Redis
Der General Richtung ist benutzerdefinierte Anmerkungen. Unter Berücksichtigung von Microservices muss die Hauptlogik gemeinsam platziert werden, und dann werden externe Schnittstellen bereitgestellt, und jeder Geschäftsdienst implementiert die Schnittstelle, um bei der Serialisierung von Daten Redis zu erhalten , Holen Sie es sich zuerst von Redis, rufen Sie es über die Schnittstelle ab, speichern Sie es in Redis und kehren Sie dann zur Verarbeitung zurück. Sie können den Redis-Inhalt auch synchron aktualisieren beim Hinzufügen oder Ändern des Datenwörterbuchs, um die Gültigkeit der Daten sicherzustellen.@Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @JacksonAnnotationsInside @JsonSerialize(using = DictSerializer.class) public @interface Dict { /** 字典类型 */ String type(); }
public class DictSerializer extends StdSerializer<Object> implements ContextualSerializer { /** 字典注解 */ private Dict dict; public DictSerializer() { super(Object.class); } public DictSerializer(Dict dict) { super(Object.class); this.dict = dict; } private String type; @Override public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException { if (Objects.isNull(value)) { gen.writeObject(value); return; } if (Objects.nonNull(dict)){ type = dict.type(); } // 通过数据字典类型和value获取name gen.writeObject(value); gen.writeFieldName(gen.getOutputContext().getCurrentName()+"Name"); gen.writeObject(label); } @Override public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty beanProperty) throws JsonMappingException { if (Objects.isNull(beanProperty)){ return prov.findValueSerializer(beanProperty.getType(), beanProperty); } Dict dict = beanProperty.getAnnotation(Dict.class); if (Objects.nonNull(dict)){ type = dict.type(); return this; } return prov.findNullValueSerializer(null); } }
private static String changeLabel(String type,String code) { if(code.indexOf(",") > -1) { String[] strs = code.split(","); if (strs.length > 1) { StringBuilder sb = new StringBuilder(); for (String str : strs) { // 从缓存中获取字典。如果不行,通过SpringUtil.getBean(); 获取服务处理 sb.append(DictDataCache.getLabel(type, str)).append(separator); } return sb.substring(0, sb.length() - 1); } } // 从缓存中获取字典。如果不行,通过SpringUtil.getBean(); 获取服务处理 return DictDataCache.getLabel(type, code); }
@Override public String getDictDataOptions(String typeCode,String value) { if (redisTemplate.hasKey("dict:"+typeCode+":"+value)){ return (String) redisTemplate.opsForValue().get("dict:"+typeCode+":"+value); } List<DictDataOptions> dictDataList = getDictDataHandler().getDictDataOptions(typeCode); if(CollUtil.isNotEmpty(dictDataList)) { put(typeCode, dictDataList); } if (redisTemplate.hasKey("dict:"+typeCode+":"+value)){ return (String) redisTemplate.opsForValue().get("dict:"+typeCode+":"+value); } return null; }
protected void put(String typeCode, List<DictDataOptions> dataList) { if (CollUtil.isNotEmpty(dataList)){ for (DictDataOptions dictDataOptions : dataList) { AbstractDictHandler.redisTemplate.opsForValue().set("dict:"+typeCode+":"+dictDataOptions.getDataLabel(),dictDataOptions.getDataValue()); } } }
@Override public List<DictDataOptions> getDictDataOptions(String typeCode) { return iSysDictService.queryDictItemsByCode(typeCode).stream() .map(e -> DictDataOptions.builder().typeCode(typeCode).dataLabel(e.getValue()).dataValue(e.getText()).build()) .collect(Collectors.toList()); }
@Dict(type = "inspectType") private String checkType;
Das obige ist der detaillierte Inhalt vonSo erhalten Sie das Datenwörterbuch basierend auf einer Anmerkung in Springboot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!