Skip to content

Tag 28 Generic ReactRoutingForwarding Datetime

junesdream edited this page Apr 18, 2023 · 1 revision
  1. Generic
Generics sind dafür da, dynamisch Objekte und Datentypen anzugeben, um allgemeine Klassen, Funktionen oder Methoden zu erstellen, die mit verschiedenen Datentypen verwendet werden können. Generics werden angewendet, wenn der Datentyp erst zur Laufzeit bekannt wird und eine dynamische Typisierung ermöglicht werden soll.
  • z.B Listen sind generische Klassen
  • Sie können Elemente jedes Datentyps aufnehmen
  • Generics ermöglichen die Erstellung von Listen mit verschiedenen Datentypen wie Strings, Integer oder benutzerdefinierten Objekten
  • Dies erhöht die Flexibilität und Wiederverwendbarkeit des Codes
  • In den spitzen Klammern <> wird der Name des Datentyps als Generic angegeben
  • Der Name steht als Platzhalter für den tatsächlichen Datentyp, z.B. "< T >" ist ein Beispiel für einen Generischen Typname, wobei "T" für einen beliebigen Datentyp wie String oder Integer steht. Es ist jedoch möglich, andere Buchstaben als Platzhalter zu verwenden, solange keine Umlaute verwendet werden.
  • Bei der Verwendung von Generics in einem Konstruktor wird der Typ als Parameter mit einem Buchstaben angegeben. Setter- und Getter-Methoden können ebenfalls den generischen Typ verwenden.
  • Mit der Elternklasse super> und Vererbung kann eine Kinderklasse ? super L von einer Vaterklasse erstellt werden. extends L definiert eine Kindklasse, die von der generischen Klasse L erbt
  1. ReactRoutingForwarding
Wenn die Anwendung lokal ausgeführt wird, werden Backend und Frontend separat gestartet. Beim Build werden diese dann als Docker-Container erstellt und das Frontend wird in das Backend eingebettet. Um sicherzustellen, dass das Backend weiß, wohin Anfragen aus dem Frontend weitergeleitet werden sollen, muss eine Klasse bzw. Configurationsclass im Backend erstellt werden, z.B. "ReactRoutingForwarding". Diese Klasse sollte zwei Methoden enthalten, um Anfragen vom Backend an das Frontend weiterzuleiten. Dabei müssen auch die entsprechenden Routen im Backend-Controller und in der Sicherheitskonfiguration definiert werden.

`import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.resource.PathResourceResolver;

import java.io.IOException;

@Configuration public class ReactRoutingForwarding implements WebMvcConfigurer {

    public static final String DEFAULT_STARTING_PAGE = "static/index.html";
    static class ReactRoutingPathResourceResolver extends PathResourceResolver {
        @Override
        protected Resource getResource(String resourcePath, Resource location) throws IOException {
            var requestedResource = location.createRelative(resourcePath);
            // Is this a request to a real file?
            if (requestedResource.exists() && requestedResource.isReadable()) {
                return requestedResource;
            }
            // It seems to be only a frontend-routing request (Single-Page-Application).
            return new ClassPathResource(DEFAULT_STARTING_PAGE);
        }
    }
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/")
                .resourceChain(true)
                .addResolver(new ReactRoutingPathResourceResolver());
    }

} `

  • Eine Annotation @Configuration wird in der Klasse angegeben, so dass die Klasse als Konfigurationsklasse verwendet werden soll.

Clone this wiki locally