Я пытаюсь сделать 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 информационного бюллетеня.
Любое предложение?
Заранее спасибо,
- Денис