Сервлет `* .html` имеет приоритет над отображением контроллера` document.html` при весенней загрузке - PullRequest
1 голос
/ 24 июня 2019

У меня есть сервлет с @WebServlet("*.html") и контроллер с @GetMapping("/greeting.html"). Несмотря на то, что отображение контроллера является более конкретным, сервлет имеет приоритет.

В моем приложении я не могу тривиально изменить отображение сервлета (я нахожусь в процессе сложной миграции с сервлетов на Spring-Boot).

Я пробовал @Order аннотацию и другие правила соответствия. Пока нет прогресса.

Вы можете воспроизвести его всего за 3 класса:

application.java

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

GreetingController.java

package hello;

import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class GreetingController {

    @GetMapping("/greeting.html")
    @Order(Ordered.HIGHEST_PRECEDENCE)
    @ResponseBody
    public String greeting() {
        return "this is geeting.html";
    }

}


SimpleServlet.java

package hello;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;

@WebServlet("/*.html")
@Order(Ordered.LOWEST_PRECEDENCE)
public class SimpleServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println("This is *.html servlet");
        super.doGet(req, resp);
    }

}

При доступе к localhost:8080 я ожидаю увидеть this is geeting.html, вместо этого я получаю This is *.html servlet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...