Spring - web.xml неправильно, включая объявления шаблонов URL - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь сделать GET-запрос на Spring MVC, который отвечает мне 404 и предупреждением

WARN (org.springframework.web.servlet.PageNotFound) - No mapping found for HTTP request with URI [/bo/newsletter/api/104] in DispatcherServlet with name 'dispatcher'

Я на 90% уверен, что проблема исходит из моего web.xml,как я скоро объясню.

Вот мой RestController:

@RequestMapping("newsletter/api")
@RestController
public class NewsletterRestController {

    @Autowired
    INewsletterService newsletterService;

    @Autowired
    public NewsletterRestController(INewsletterService newsletterService) {
        this.newsletterService = newsletterService;
    }

    @InitBinder
    public void initBinder(final WebDataBinder binder) {
        binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
    }

    @PutMapping
    public ResponseEntity sendNews(
            @RequestBody Newsletter news,
            final User user) throws IOException {
        news.setLastUserId(user.getId());
        newsletterService.saveNewsletter(user, news);
        return new ResponseEntity(HttpStatus.CREATED);
    }

    @GetMapping("/{id}")
    public Newsletter getNewsletter(@PathVariable Long id) {
        return newsletterService.getOneNewsletter(id);
    }

}

А вот мой web.xml (точнее интересная часть):

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
                classpath:spring/applicationContext-model.xml,

                classpath:spring/applicationContext-mail.xml,

                classpath:spring/applicationContext-dbcp.xml,
                classpath:spring/applicationContext-dao.xml,
                classpath:spring/applicationContext-service.xml,

                classpath:spring/applicationContext-taxref-dbcp.xml,
                classpath:spring/applicationContext-taxref-dao.xml,
                classpath:spring/applicationContext-taxref-service.xml,

                classpath:spring/applicationContext-security-bo.xml,                               
                classpath:spring/dispatcher-servlet.xml                
        </param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath:spring/dispatcher-servlet.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/newsletter/api/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/newsletter/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/index/*</url-pattern>
    </servlet-mapping>

Интересно то, что если я изменю /newsletter/api/* <url-pattern> на /newsletter/api/104 (например, если я пытаюсь получить идентификатор 104), запрос GET работает как чудо.

проблема в том, что я подумал, что поставить, в качестве URL-шаблона, в этом случае /newsletter/* будет разумно охватывать каждое расширение / URL информационного бюллетеня.

Любое предложение?

Заранее спасибо,

- Денис

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