suchen
HeimJavajavaLernprogrammSo erhalten Sie das Datenwörterbuch basierend auf einer Anmerkung in Springboot

Es stellt sich die Frage:

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.

Anforderungen:

  • 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.
  • Implementierung

Anmerkungen definieren

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = DictSerializer.class)
public @interface Dict {

    /** 字典类型 */
    String type();
}

Geben Sie den Ort zum Hinzufügen von Anmerkungen an
  • Geben Sie die Gültigkeitszeit der Anmerkungen an
  • Geben Sie die Serialisierungsverarbeitungsklasse an

  • Serialisierungsverarbeitungsklasse
  • 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);
        }
    }

    Die Verarbeitungslogik besteht darin, dass der ursprüngliche Feldinhalt unverändert bleibt und ein neues Feld hinzugefügt wird, um den konvertierten Wert zu speichern Es handelt sich um eine Mehrfachauswahl, die Standardeinstellung ist Komma-Spleißen und die Eingabeparametersteuerung wird später hinzugefügt.
  • 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);
    }
Beurteilen Sie anhand des Schlüssels, ob er vorhanden ist. Wenn er nicht vorhanden ist, rufen Sie ihn ab Wenn es nicht vorhanden ist, laden Sie es direkt in Redis herunter und rufen Sie es erneut von Redis ab.
    @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;
    }
  • Platzieren Sie die Datenwörterbuchwerte in einer Schleife.

    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());
            }
        }
    }

    Beziehen Sie die Daten entsprechend dem Datenwörterbuchtyp über die Schnittstelle. Beachten Sie, dass diese Implementierungsklasse dann von jedem Mikrodienst implementiert werden muss Der grundlegende Datendienst hängt auf und ruft Fehler auf. Dies führt häufig zu einer Standardausführung.
4. Verwenden Sie

@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());
}

, um Anmerkungen zu den entsprechenden Feldern in der an das Frontend zurückgegebenen Entität hinzuzufügen, und geben Sie den Datenwörterbuchtypwert an.
    @Dict(type = "inspectType")
    private String checkType;
  • Der vom Frontend erhaltene JSON verfügt über ein weiteres Feld: checkTypeName und Der Inhalt ist der chinesische Wert von 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!

Stellungnahme
Dieser Artikel ist reproduziert unter:亿速云. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.