代码之家  ›  专栏  ›  技术社区  ›  gigashark

springmvc后端返回404(Rest)

  •  0
  • gigashark  · 技术社区  · 6 年前

    我希望有人能帮我解决这个问题。我现在写的是一个springmvc服务器和一个客户机。不幸的是,我的Rest控制器只返回404。我用的是Tomcat8。我知道Spring应用程序部署正确,因为我可以访问index.jsp页面。部署它的上下文是/backend。所以我的基本网址是localhost:8080/backend. 现在我有一个像这样的控制器。

    @Controller
    @RequestMapping("/api/developer")
    public class DeveloperController {
    
    @Autowired
    private DeveloperOutboundDipatcher service;
    
    @RequestMapping(method = RequestMethod.GET, value = "/getAll")
    public List<DeveloperDTO> findAll() {
        return service.findAllDeveloper();
    }
    
    @RequestMapping(method = RequestMethod.GET, value = "/get/{name}")
    public DeveloperDTO findByName(@PathVariable String name) {
        return service.findOneByName(name);
    }
    
    @RequestMapping(method = RequestMethod.DELETE, value = "/delete/{name}")
    public void deleteDeveloper(@PathVariable String name) {
        service.deleteDeveloper(name);
    }
    
    @RequestMapping(method = RequestMethod.POST, value = "/save/")
    public void saveDeveloper(@RequestBody DeveloperDTO developer) {
        service.save(developer);
    }
    
    @RequestMapping(method = RequestMethod.PUT, value = "/edit/")
    public void editDeveloper(@RequestBody DeveloperDTO developer) {
        service.edit(developer);
    }
    }
    

    package gamescreation;
    @Configuration
    @ComponentScan(basePackages= "gamescreation")
    @EnableJpaRepositories("gamescreation")
    @EnableTransactionManagement
    @EnableWebMvc
    public class MvcConfiguration extends WebMvcConfigurerAdapter{
    private final String PROPERTY_DRIVER = "driver";
    private final String PROPERTY_URL = "url";
    private final String PROPERTY_USERNAME = "user";
    private final String PROPERTY_PASSWORD = "password";
    private final String PROPERTY_SHOW_SQL = "hibernate.show_sql";
    private final String PROPERTY_DIALECT = "hibernate.dialect";
    
    @Autowired
    Environment environment;
    
    @Bean
    public ViewResolver getViewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }
    
    @Bean
    public ModelMapper modelMapper() {
        return new ModelMapper();
    }
    
    
    
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean em
                = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource());
        em.setPackagesToScan("gamescreation.entity" );
    
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        em.setJpaProperties(hibernateProperties());
    
        return em;
    }
    
    @Bean
    public DataSource dataSource() {
        BasicDataSource dataSource = new BasicDataSource ();
        dataSource.setDriverClassName("org.postgresql.Driver");
        return dataSource;
    }
    
    @Bean
    public PlatformTransactionManager transactionManager(
            EntityManagerFactory emf){
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);
    
        return transactionManager;
    }
    
    
    Properties hibernateProperties() {
        return new Properties() {
            {
                setProperty("hibernate.hbm2ddl.auto",
                       "false");
                setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQL82Dialect");
                setProperty("hibernate.globally_quoted_identifiers",
                        "true");
            }
        };
    }
    
    Properties additionalProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
        properties.setProperty(
                "hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
    
        return properties;
    }
    @Bean
    public SpringLiquibase liquibase() {
        SpringLiquibase liquibase = new SpringLiquibase();
        liquibase.setChangeLog("classpath:/db-changelog-master.xml");
        liquibase.setDataSource(dataSource());
        return liquibase;
    }
    
    
    
    
    
    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
        return new PersistenceExceptionTranslationPostProcessor();
    }
    }
    

    我希望有人能告诉我丢失了什么。

    我的客户机类如下所示:

    @Service
    public class DeveloperService {
    
    private static final String DEVELOPER_BASEURL = "http://localhost:8080/backend/api/developer";
    
    public List<DeveloperDTO> getDeveloperList() {
        RestTemplate restTemplate = new RestTemplate();
        DeveloperList response = restTemplate.getForObject(DEVELOPER_BASEURL + "/getAll", DeveloperList.class);
        return response.getDevelopers();
    }
    
    public DeveloperDTO getSelectedDeveloper(String name) {
        String url = DEVELOPER_BASEURL + "/get/{name}";
        UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url).queryParam("name", name);
        RestTemplate restTemplate = new RestTemplate();
        DeveloperDTO response = restTemplate.getForObject(builder.toUriString(), DeveloperDTO.class);
        return response;
    }
    
    public void delete(String name) {
        String url = DEVELOPER_BASEURL + "/delete/{name}";
        UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url).queryParam("name", name);
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.delete(builder.toUriString());
    }
    
    public DeveloperDTO save(DeveloperDTO dto) {
        String url = DEVELOPER_BASEURL + "/save";
    
        HttpEntity<DeveloperDTO> request = new HttpEntity<>(dto);
        RestTemplate restTemplate = new RestTemplate();
        DeveloperDTO response = restTemplate.postForObject(url, request, DeveloperDTO.class);
        return response;
    
    }
    }
    

    事先谢谢你的帮助。如果你需要任何其他信息从我的项目,请随时问。

    1 回复  |  直到 6 年前
        1
  •  1
  •   saif    6 年前

    @仅控制器无法工作请使用@Responsebody在REST中获取响应或使用@RestController。