2016-04-11 1 views
0

Я использую весенний mvc для создания веб-сервиса для отдыха. Тем не менее, я всегда получаю 404. Я не знаю, где я ошибаюсь.Весна REST всегда возвращается 404

Вот мой Initializer:

public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

@Override 
protected Class<?>[] getRootConfigClasses() { 
    // TODO Auto-generated method stub 
    return new Class<?>[] { RootConfig.class }; 
} 

@Override 
protected Class<?>[] getServletConfigClasses() { 
    // TODO Auto-generated method stub 
    return new Class<?>[] { WebConfig.class }; 
} 

@Override 
protected String[] getServletMappings() { 
    // TODO Auto-generated method stub 
     return new String[] { "/" }; 
    } 

} 

Вот мой WebConfig:

@Configuration 
@EnableWebMvc 
@ComponentScan("com.jh.dummy.web") 
public class WebConfig extends WebMvcConfigurerAdapter { 
    @Bean 
    public ViewResolver viewResolver() { 
     InternalResourceViewResolver viewResovler = new InternalResourceViewResolver(); 
     viewResovler.setPrefix("/"); 
     viewResovler.setSuffix(".html"); 
     viewResovler.setExposeContextBeansAsAttributes(true); 
     return viewResovler; 
    } 

    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
     configurer.enable(); 
    } 

} 

Вот мой файловый сервер остальное:

@RestController 
@RequestMapping("/v1/") 
public class PositionService { 
    @RequestMapping(value = "position", consumes = MediaType.APPLICATION_JSON_VALUE, method = POST) 
    public void create(List<Map<String, String>> data) { 
    } 

    @RequestMapping(value = "position/{id:\\d+}", produces = MediaType.APPLICATION_JSON_VALUE, method = GET) 
    public void getById(@PathVariable("id") Long id) { 
    } 

    @RequestMapping(value = "position/title/{title:.+}/{start:\\d{1,}}", produces = MediaType.APPLICATION_JSON_VALUE, method = GET) 
    public void getByTitle(@PathVariable("title") String title, 
      @PathVariable("start") int start) { 
    } 

@RequestMapping(value = "position/title/{title:.+}/address/{address:\\w{1,}}/{start:\\d{1,}}", produces = MediaType.APPLICATION_JSON_VALUE, method = GET) 
public void getByTitleAndLocation(@PathVariable("title") String title, 
     @PathVariable("address") String address, @PathVariable("start") int start) { 

    } 

    @RequestMapping(value = "position/address/{address:\\w{1,}}/{start:\\d{1,}}", produces = MediaType.APPLICATION_JSON_VALUE, method = GET) 
    public void getByLocation(@PathVariable("address") String address, 
      @PathVariable("start") int start) { 
    } 

    @RequestMapping(value = "position/company/{company:.{1,}}/{start:\\d{1,}}", produces = MediaType.APPLICATION_JSON_VALUE, method = GET) 
    public void getByCompany(@PathVariable("company") String company, 
       @PathVariable("start") int start) { 
     } 

    } 

Вот запрос:

enter image description here

Когда я использую скручивание, я всегда получаю 404. Я не могу найти, где идет не так. Есть идеи?

+0

И можем ли мы увидеть полный HTTP-запрос? Включая заголовки? –

+0

@BoristheSpider HTTP-запрос - это просто «завиток localhost: 8080/v1/position/1». –

+0

Нам нужны заголовки, потому что нам нужно увидеть, что вы отправляете для заголовка ['Accept'] (https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). –

ответ

0

Я решаю проблему. Оказывается, мне нужно добавить/dummy/в url. Поэтому url будет «localhost: 8080/dummy/v1/position/v1». Но в других моих проектах я не должен добавлять название проекта в манекен. Я все еще не знаю, зачем мне это делать на этот раз. Когда я узнаю, я буду держать вас в покое.

+1

Наконец-то исправьте, причина в том, что я забыл установить приложение в «/», поэтому мне нужно добавить название проекта в URL-адрес –