Spring MVC - не найдено сопоставление для HTTP-запроса в DispatcherServlet - PullRequest
0 голосов
/ 31 декабря 2018

Я переписываю API-интерфейс с Nodejs на Spring.Это мое первое приложение Spring REST API.Я хочу сделать это как можно более простым, чтобы избежать использования .xml(s), следуя документации Spring

Этот бэкэнд, с тех пор, имеет только один контроллер и один сервис.Все приложение предназначено не для обслуживания каких-либо веб-страниц, а только для API REST.

Я начал с написания простой конфигурации, основанной на AbstractAnnotationConfigDispatcherServletInitializer и WebMvcConfigurerAdapter:

@Configuration
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[]{MvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

//---------------------------------------------------------------

@Configuration
@EnableWebMvc
@ComponentScan("com.root.package")
@EnableAspectJAutoProxy
public class MvcConfig extends WebMvcConfigurerAdapter {
   //I think I may not need anything inside here, right?
}

... и контроллер тоже ...

@Controller("/locale")
public class LocaleController {

    @Autowired
    private LocaleService localeService;

    @RequestMapping(value = "/labels", method = RequestMethod.GET)
    public @ResponseBody List<Label> getAll() {
        return localeService.getAll();
    }
}

Запускается на Tomcat, я могу его отладить.Журнал показывает Mapped "{[/labels],methods=[GET]}" и Mapped URL path [/locale] onto handler '/locale', но как только я звоню почтальону, я вижу No mapping found for HTTP request with URI [/myapp/locale/labels] in DispatcherServlet with name 'dispatcher'.

Каждое исследование в основном приводило меня к Почему Spring MVC отвечает 404 и сообщает «НетОбнаружено сопоставление для HTTP-запроса с URI [...] в DispatcherServlet "? -but- немного многословно и ... почти каждая написанная концепция основана на документации Spring, которой я уже следовал, поскольку я не углубляюсьзнаю весну :) 1023

Я уверен, что у моей проблемы есть более простое решение.Чего мне не хватает?

1 Ответ

0 голосов
/ 31 декабря 2018

Вы сделали небольшую ошибку в определении вашего контроллера.Вы писали:

@Controller("/locale")
public class LocaleController {

    @Autowired
    private LocaleService localeService;

    @RequestMapping(value = "/labels", method = RequestMethod.GET)
    public @ResponseBody List<Label> getAll() {
        return localeService.getAll();
    }
}

Это означает, что боб, который создаст источник, будет иметь имя "/ locale";если вы хотите, чтобы контроллер «отвечал» на путь / локаль / метки, вы должны написать Контроллер следующим образом:

@Controller
@RequestMapping("/locale")
public class LocaleController {

    @Autowired
    private LocaleService localeService;

    @RequestMapping(value = "/labels", method = RequestMethod.GET)
    public @ResponseBody List<Label> getAll() {
        return localeService.getAll();
    }
}

Таким образом, вы говорите Spring, что контроллер LocaleController будет отвечать навсе запросы с префиксом /locale;каждый метод внутри него будет вызываться в соответствии с вызывающим путем

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