LINUX.ORG.RU

Конфликт статики и контроллера

 ,


0

2

У меня есть контроллер для роутов вида /{group}/{item} и есть ассеты, которые должны отдаваться по роутам /static/**. В результате получается, что контроллер перехватывает запросы к ассетам. Можно ли статику сделать приоритетнее или заблокировать для контроллера парсинг group = "static"?

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
    }
}

@Controller
@RequestMapping("/{group}/{item}")
public class HelloController {

    @GetMapping("")
    @ResponseBody
    public String hello(@PathVariable("group") String group, @PathVariable("item") String item) {
        return "Hello %s/%s".formatted(group, item);
    }
}

Что интересно, ChatGPT уверяет, что и так всё правильно должно работать, но не работает.

★★★★★

У тебя криво запроектирован document tree.

Давай поясню вопросом - что будет, если у тебя есть «статик» /static/zhopa.png и есть группа group_id=static в которой есть элемент item=«zhopa.png»? Ответ - у тебя получается конфликт.

А значит, ты неправильно спроектировал дерево изначально.

Поэтому лучше не трахай моск а выдели нормально /static и /api, как и рекомендуется делать.

no-dashi-v2 ★★
()
Последнее исправление: no-dashi-v2 (всего исправлений: 1)

Эм, а где все спецы по java? Им же специально Spring сделали чтобы вообще кодить не приходя в сознание. Придётся php макаке отдуваться.

Попробуйте добавить @EnableWebMvc после @Configuration. Без этого Вы используете стандартный DispatcherServlet который вообще не умеет в статику. В итоге должно получиться что-то типа:

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/static/**")
	.addResourceLocations("/static/");
	}
	//...
}
Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 1)
Ответ на: комментарий от Obezyan

Без этого Вы используете стандартный DispatcherServlet который вообще не умеет в статику.

На самом деле я выше неправильно сказал: статика по своим запросам отдавалась, а вне своего скоупа этот хендлер отдавал 404.

static_lab ★★★★★
() автор топика