Spring Controller总是给404

时间:2015-09-04 14:09:37

标签: java spring maven spring-mvc

这是我使用Spring构建的第一个WebApp,我很生气,因为每次调用我的RestController都会给我404.我尝试使用Class / Annotaion配置而不是XML配置,我认为这就是问题是生活。

这是我的配置类,pom和控制器。

对于大量的代码感到抱歉。

对于api通话我使用localhost:8080 / Polito / metric

Initailizer

var buffer = Rx.Observable.merge(source1, source2).scan(
  function (arr, item) { 
    if (!magic) { 
      return arr.push(item); 
    }
    else { 
      return [item]; //Clear the buffer from previous items
    } 
  }, []);

RootConfig

package com.poli.config;

import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

@Order(1)
public class Initializer extends     AbstractAnnotationConfigDispatcherServletInitializer {
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { RootConfig.class, SecurityConfig.class };
    }
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebAppConfig.class };
    }
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

SecurityConfig

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories("com.poli")
@ComponentScan("com.poli")
@PropertySource("classpath:application.properties")
public class RootConfig {

private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";
private static final String PROPERTY_NAME_DATABASE_URL = "db.url";
private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";

private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";
private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";
private static final String PROPERTY_NAME_HIBERNATE_DDL_AUTO = "hibernate.hbm2ddl.auto";
private static final String PROPERTY_NAME_HIBERNATE_EJB_NAMING_STRATEGY = "hibernate.ejb.naming_strategy";
private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql";

@Resource
private Environment env;

@Bean
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();

    dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
    dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
    dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
    dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));

    return dataSource;
}

@Bean
public LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
    sessionFactoryBean.setDataSource(dataSource());
    sessionFactoryBean.setPackagesToScan(env.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));
    sessionFactoryBean.setHibernateProperties(hibProperties());
    return sessionFactoryBean;
}

private Properties hibProperties() {
    Properties properties = new Properties();
    properties.put(PROPERTY_NAME_HIBERNATE_DIALECT, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));
    properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
    return properties;  
}

@Bean
public HibernateTransactionManager transactionManager() {
    HibernateTransactionManager transactionManager = new HibernateTransactionManager();
    transactionManager.setSessionFactory(sessionFactory().getObject());
    return transactionManager;
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {

    LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
    entityManagerFactoryBean.setDataSource(dataSource());
    entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
    entityManagerFactoryBean.setPackagesToScan(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN);

    Properties jpaProperties = new Properties();
    jpaProperties.put(PROPERTY_NAME_HIBERNATE_DIALECT, env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));
    jpaProperties.put(PROPERTY_NAME_HIBERNATE_DDL_AUTO, 
            env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DDL_AUTO));
    jpaProperties.put(PROPERTY_NAME_HIBERNATE_EJB_NAMING_STRATEGY, 
            env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_EJB_NAMING_STRATEGY));
    jpaProperties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, 
            env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
    jpaProperties.put(PROPERTY_NAME_HIBERNATE_FORMAT_SQL, 
            env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_FORMAT_SQL));
    entityManagerFactoryBean.setJpaProperties(jpaProperties);
    return entityManagerFactoryBean;
}
}

WebAppConfig

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private DataSource dataSource;

@Autowired
private UserDetailsService customUserDetailsService;

protected void registerAuthentication(AuthenticationManagerBuilder auth) throws Exception {
    auth.jdbcAuthentication().dataSource(dataSource);
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.userDetailsService(customUserDetailsService)
        .authorizeRequests()
        .antMatchers("/personal/**").hasRole("USER")
        .and()
        .formLogin()
        .loginPage("/login.html")
        .defaultSuccessUrl("/index.html")
        .failureUrl("/error-login.html")
        .permitAll()
        .and()
        .logout()
        .logoutSuccessUrl("/index.html");
}

}

SecurityInitializer

@Configuration
@EnableWebMvc
@ComponentScan("com.poli")
public class WebAppConfig {

    @Bean
    public UrlBasedViewResolver setupViewResolver() {
        UrlBasedViewResolver resolver = new UrlBasedViewResolver();
       resolver.setPrefix("/WEB-INF/pages/");
       resolver.setSuffix(".jsp");
       resolver.setViewClass(JstlView.class);
       return resolver;
   }
}

MetricRESTController

@Order(2)
public class SecurityInitializer extends        AbstractSecurityWebApplicationInitializer {

}

}

最后 pom.xml

@RestController()
@RequestMapping("/metric")
public class MetricRESTController {

@Autowired
private MetricService metricService;

@RequestMapping(method = RequestMethod.POST, value="/")
@ResponseStatus(value=HttpStatus.CREATED)
public void post(@RequestBody Metric metric){
    metricService.addMetric(metric);
}

@RequestMapping(method = RequestMethod.GET, value = "/{uuid}")
public List<Metric> get(@PathVariable("uuid") String uuid){
    return metricService.findByUuid(uuid);
}

@RequestMapping(method = RequestMethod.GET, value = "/")
public List<Metric> get(){
    return metricService.findAllMetrics();
}

0 个答案:

没有答案