Как настраивают УСПОКОИТЕЛЬНЫЙ контроллер в Spring 3 с аннотациями?

Я пытаюсь создать УСПОКОИТЕЛЬНЫЙ контроллер с помощью Spring 3.0. Контроллером является для управления API для приложения портала. Операции, которые я хочу выполнить:

  • ЗАСТАВЬТЕ/api/portals перечислять все порталы
  • POST/api/portals для создания нового портала
  • ЗАСТАВЬТЕ/api/portals/{идентификатор} получать существующий портал
  • ПОМЕЩЕННЫЙ/api/portals/{идентификатор} для обновления существующего портала
  • УДАЛИТЕ/api/portal/{идентификатор} для удаления существующего портала

После аннотирования контроллера, как проиллюстрировано ниже я нахожу, операции, чтобы перечислить все порталы или создать новый портал не становятся отображенными.

Таким образом, мои вопросы:

  • Я аннотировал класс правильно?
  • Я следую корректным конвенциям для реализации УСПОКОИТЕЛЬНОГО веб-сервиса?
  • Могло бы быть что-то прерванное Spring?

Извлечение кода ниже показывает, как я аннотировал свой класс:

@Controller
@RequestMapping("/api/portals")
public final class PortalAPIController
{
    private final static Logger LOGGER = LoggerFactory.getLogger(PortalAPIController.class);

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String listPortals(final Model model)
    {
         PortalAPIController.LOGGER.debug("Portal API: listPortals()");
         .
         .
         return "portals";
    }

    @RequestMapping(value = "/", method = RequestMethod.POST)
    public String createPortal(@RequestBody final MultiValueMap portalData, final Model model)
    {
        PortalAPIController.LOGGER.debug("Portal API: createPortal()");
        .
        .
        return "portal";
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public String getPortal(@PathVariable("id") final String portalId, final Model model, final HttpServletResponse response)
        throws IOException
    {
        PortalAPIController.LOGGER.debug("Portal API: getPortal()");
        .
        .
        return "portal";
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
    public String updatePortal(@PathVariable("id") final String portalId,
        @RequestBody final MultiValueMap portalData, final Model model, final HttpServletResponse response)
        throws IOException
    {
        PortalAPIController.LOGGER.debug("Portal API: updatePortal()");
        .
        .
        return "portal";
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
    public String deletePortal(@PathVariable("id") final String portalId, final Model model, final HttpServletResponse response)
        throws IOException
    {
        PortalAPIController.LOGGER.debug("Portal API: deletePortal()");
        .
        .
        return "portal";
    }

    .
    .
}

Во время запуска я вижу, что вещи Spring он зарегистрировал конечные точки:

2010-02-19 01:18:41,733 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - Mapped URL path [/api/portals/] onto handler [com.btmatthews.mars.portal.web.controller.PortalAPIController@141717f]
2010-02-19 01:18:41,734 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - Mapped URL path [/api/portals/{id}] onto handler [com.btmatthews.mars.portal.web.controller.PortalAPIController@141717f]
2010-02-19 01:18:41,734 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - Mapped URL path [/api/portals/{id}.*] onto handler [com.btmatthews.mars.portal.web.controller.PortalAPIController@141717f]
2010-02-19 01:18:41,735 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - Mapped URL path [/api/portals/{id}/] onto handler [com.btmatthews.mars.portal.web.controller.PortalAPIController@141717f]
2010-02-19 01:18:41,735 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - Mapped URL path [/api/portals] onto handler [com.btmatthews.mars.portal.web.controller.PortalAPIController@141717f]
2010-02-19 01:18:41,735 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - Mapped URL path [/api/portals.*] onto handler [com.btmatthews.mars.portal.web.controller.PortalAPIController@141717f]

Но когда я пытаюсь вызвать свой API с помощью ЗАВИХРЕНИЯ

curl http://localhost:8080/com.btmatthews.minerva.portal/api/portals/

или

curl http://localhost:8080/com.btmatthews.minerva.portal/api/portals

Я получаю следующие ошибки:

2010-02-19 01:19:20,199 WARN [org.springframework.web.servlet.PageNotFound] - No mapping found for HTTP request with URI [/com.btmatthews.minerva.portal/api/portals] in DispatcherServlet with name 'portal'
2010-02-19 01:19:32,360 WARN [org.springframework.web.servlet.PageNotFound] - No mapping found for HTTP request with URI [/com.btmatthews.minerva.portal/api/portals/] in DispatcherServlet with name 'portal'

Я получаю ту же проблему, когда я пытаюсь сделать создавание:

curl -F ...... --request POST http://localhost:8080/com.btmatthtews.minerva/api/portals

Но если попытка воздействовать на существующий ресурс (получают, обновите или удалите), она работает хорошо.

Обновление: решение было предоставлено в комментарии @axtavt. Я использовал <шаблон URL> / API /* в моем отображении сервлета web.xml. Это должно было быть изменено на <шаблон URL> /

6
задан Community 23 May 2017 в 12:33
поделиться

1 ответ

URL-адрес, который вы публикуете в выдержке из curl

http://localhost:8080/portal/api/portals

, не соответствует URL-адресу в предупреждении Spring

/com.btmatthews.minerva.portal/api/portals

. Не зная, как настроено ваше веб-приложение, какие Путь контекста, в котором он находится, как выглядит контекст Spring и т. д., довольно сложно диагностировать, но для меня это похоже на большую подсказку.

0
ответ дан 17 December 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: