Frage

Ich habe eine vorhandene Spring-Webanwendung, die zwei Controller verwendet, die AbstractController erweitern.Ich möchte Spring Boot in die Anwendung integrieren, damit wir es als eigenständige Anwendung ausführen können.

Ich stehe vor einem Problem, weil Spring die Anrufe nicht an meinen Controller weiterleitet.Wie kann ich den Controller einem URL-Muster wie „/app/*“ zuordnen?

SampleController.java

@Controller("myController")
public class SampleController extends AbstractController {
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
        response.getWriter().print("Hello world!");
        return null;
    }
}

Anwendung.java

@EnableAutoConfiguration
@Configuration
@ComponentScan
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public SimpleUrlHandlerMapping sampleServletMapping() {
        SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();

        Properties urlProperties = new Properties();
        urlProperties.put("/index", "myController");

        mapping.setMappings(urlProperties);

        return mapping;
    }
}

Wenn ich die Anwendung starte, erhalte ich folgende Meldung:

INFO  [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping] Mapped URL path [/index] onto handler 'myController'

Aber wenn ich eine Anfrage an /index sende, erhalte ich folgende Meldungen:

DEBUG [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] Looking up handler method for path /index
DEBUG [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] Did not find handler method for [/index]
DEBUG [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping] Matching patterns for request [/index] are [/**]
DEBUG [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping] URI Template variables for request [/index] are {}
DEBUG [org.springframework.web.servlet.handler.SimpleUrlHandlerMapping] Mapping [/index] to HandlerExecutionChain with handler [org.springframework.web.servlet.resource.ResourceHttpRequestHandler@11195d3e] and 1 interceptor
War es hilfreich?

Lösung

SimpleUrlHandlerMappings werden bestellt und, wie im Javadoc beschrieben Die Standardeinstellung ist Integer.MAX_VALUE Das bedeutet, dass sie die geringstmögliche Priorität haben.Dies bewirkt ResourceHttpRequestHandler (was zugeordnet ist /** und hat eine Reihenfolge von Integer.MAX_VALUE - 1 (standardmäßig) Vorrang vor der Zuordnung für Ihren Controller haben.

Aktualisieren Sie Ihre sampleServletMapping() -Methode, um die Reihenfolge Ihres Mappings auf einen Wert festzulegen, der kleiner als ist Integer.MAX_VALUE - 1.Zum Beispiel:

@Bean
public SimpleUrlHandlerMapping sampleServletMapping() {
    SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
    mapping.setOrder(Integer.MAX_VALUE - 2);

    Properties urlProperties = new Properties();
    urlProperties.put("/index", "myController");

    mapping.setMappings(urlProperties);


    return mapping;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top