2015-03-24 102 views
0

当执行一个请求http://localhost:8080/SquirrelAuth/api/groups/.json我得到这个错误:没有找到映射与URI HTTP请求......在DispatcherServlet的名称为

2015年3月24日下午5时55分52秒org.springframework.web.servlet.PageNotFound noHandlerFound 警告:没有找到映射与URI [/SquirrelAuth/api/groups/.json在DispatcherServlet的名为“调度”

我已经永远纺就这一个,似乎无法找到HTTP请求任何答案在那里为我工作。任何人都可以帮助我通过这个?

出海依赖/属性

<properties> 
    <spring.version>4.1.5.RELEASE</spring.version> 
    <oauth.version>2.0.7.RELEASE</oauth.version> 
    <taglibs.version>3.2.6.RELEASE</taglibs.version> 
    <hibernate.version>4.3.5.Final</hibernate.version> 
    <log4j.version>2.2</log4j.version> 
    <jdk.version>1.7</jdk.version> 
    <jackson.version>2.5.1</jackson.version> 
    <jstl.version>1.2</jstl.version> 
    <mysql.version>5.1.6</mysql.version> 
    <liquibase.version>3.3.2</liquibase.version> 
    <javax.version>3.1.0</javax.version> 
    <mavenWar.version>2.6</mavenWar.version> 
    <mavenCompiler.version>3.2</mavenCompiler.version> 
</properties> 
<dependencies> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>${log4j.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security.oauth</groupId> 
     <artifactId>spring-security-oauth2</artifactId> 
     <version>${oauth.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-taglibs</artifactId> 
     <version>${taglibs.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>jstl</groupId> 
     <artifactId>jstl</artifactId> 
     <version>${jstl.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>${jackson.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-annotations</artifactId> 
     <version>${jackson.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>${mysql.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.liquibase</groupId> 
     <artifactId>liquibase-core</artifactId> 
     <version>${liquibase.version}</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>${javax.version}</version> 
    </dependency> 
</dependencies> 

Web应用程序初始化器

public class WebInitializer implements WebApplicationInitializer { 

    public void onStartup(ServletContext servletContext) throws ServletException {   
     WebApplicationContext context = getContext(); 
     servletContext.addListener(new ContextLoaderListener(context));  

     Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(context)); 
     servlet.addMapping("/"); 
     servlet.setLoadOnStartup(1); 

    } 

    private AnnotationConfigWebApplicationContext getContext() { 
     AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
     context.setConfigLocation("com.squirrels.config"); 
     return context; 
    } 

} 

PersistenceJPAConfig

import java.util.Properties; 

import javax.persistence.EntityManagerFactory; 
import javax.sql.DataSource; 

import liquibase.integration.spring.SpringLiquibase; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.PropertySource; 
import org.springframework.core.env.Environment; 
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
import org.springframework.orm.jpa.JpaTransactionManager; 
import org.springframework.orm.jpa.JpaVendorAdapter; 
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; 
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; 
import org.springframework.transaction.PlatformTransactionManager; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 

@Configuration 
@EnableTransactionManagement 
@ComponentScan({ "com.squirrels.controller", "com.squirrels.services", "com.squirrels.persistence.dao" }) 
@PropertySource(value = { "classpath:squirrel.properties" }) 
public class PersistenceJPAConfig { 

    @Autowired 
    private Environment environment; 

    @Bean 
    public SpringLiquibase liquibase() { 
     SpringLiquibase liquibase = new SpringLiquibase(); 
     liquibase.setDataSource(dataSource()); 
     liquibase.setDefaultSchema(environment.getRequiredProperty("db_schema")); 
     liquibase.setChangeLog("classpath:/db/changelog/db.changelog-master.xml"); 

     return liquibase; 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); 
     em.setDataSource(dataSource()); 
     em.setPackagesToScan(new String[] { "com.squirrels.persistence.model" }); 

     JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     em.setJpaVendorAdapter(vendorAdapter); 
     em.setJpaProperties(additionalProperties()); 

     return em; 
    } 

    @Bean 
    public DataSource dataSource() { 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName(environment.getRequiredProperty("db_driverClass")); 
     dataSource.setUrl(environment.getRequiredProperty("db_jdbcUrl")); 
     dataSource.setUsername(environment.getRequiredProperty("db_user")); 
     dataSource.setPassword(environment.getRequiredProperty("db_password")); 
     return dataSource; 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) { 
     JpaTransactionManager transactionManager = new JpaTransactionManager(); 
     transactionManager.setEntityManagerFactory(emf); 

     return transactionManager; 
    } 

    @Bean 
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { 
     return new PersistenceExceptionTranslationPostProcessor(); 
    } 

    Properties additionalProperties() { 
     Properties properties = new Properties(); 
     properties.setProperty("hibernate.dialect", environment.getRequiredProperty("db_hibernateDialect")); 
     return properties; 
    } 
} 

组控制器

package com.squirrels.controller; 

import java.util.List; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.ResponseBody; 

import com.squirrels.dto.GroupDTO; 
import com.squirrels.services.GroupUtil; 

@Controller 
public class GroupsController { 

    @Autowired 
    GroupUtil groupUtil; 

    static final Logger logger = LogManager.getLogger(GroupsController.class); 

    @RequestMapping(value = "/api/groups/", method = RequestMethod.GET) 
    public @ResponseBody List<GroupDTO> getGroups() { 

     List<GroupDTO> groupList = null; 
     try { 
      groupList = groupUtil.getAll(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return groupList; 
    } 
} 

WebMvcConfig

package com.squirrels.config; 

import java.util.ArrayList; 
import java.util.List; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.http.MediaType; 
import org.springframework.web.accept.ContentNegotiationManager; 
import org.springframework.web.servlet.ViewResolver; 
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver; 

@Configuration 
@EnableWebMvc 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 

    /* 
    * Configure ContentNegotiationManager 
    */ 
    @Override 
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { 
     configurer.ignoreAcceptHeader(true).defaultContentType(MediaType.TEXT_HTML); 
    } 

    /* 
    * Configure ContentNegotiatingViewResolver 
    */ 
    @Bean 
    public ViewResolver contentNegotiatingViewResolver(ContentNegotiationManager manager) { 
     ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver(); 
     resolver.setContentNegotiationManager(manager); 

     // Define all possible view resolvers 
     List<ViewResolver> resolvers = new ArrayList<ViewResolver>(); 
     resolvers.add(jsonViewResolver());   
     resolver.setViewResolvers(resolvers); 
     return resolver; 
    } 

    /* 
    * Configure View resolver to provide JSON output using JACKSON library to 
    * convert object in JSON format. 
    */ 
    @Bean 
    public ViewResolver jsonViewResolver() { 
     return new JsonViewResolver(); 
    } 

} 

回答

0

我结束了昨晚解决它最后。

我将此添加到WebMvcConfig类,一切都很好。

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

春天用来解决@RequestMapping注解RequestMappingHandlerMapping有一个属性alwaysUseFullPath其默认为false。这意味着您在处理程序上设置的映射(即您的@RequestMapping注释)相对于调度程序servlet映射(在您的情况下为/api)得到解决。

看来你没有覆盖它,以便使控制器/groups的基础映射路径,而不是/api/groups

看到reference的细节

+0

将该bean添加到持久性配置中,并仍然得到相同的错误。 \t @Bean \t公共RequestMappingHandlerMapping处理器映射(){ \t \t RequestMappingHandlerMapping处理器映射=新RequestMappingHandlerMapping(); \t \t handlerMapping.setAlwaysUseFullPath(true); \t \t \t \t return handlerMapping; \t} – nmb1106 2015-03-24 23:08:47

+0

我不确定/.json路径根据这个http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping -suffix-pattern-match尝试在.json之前添加一些东西,让我们说/ abc。json并将映射调整为/ abc – grid 2015-03-24 23:28:24

+0

在我的问题中更新了我的课程,以反映您的建议中的更改。完全摆脱了.json。 – nmb1106 2015-03-25 01:01:23

相关问题